<!DOCTYPE html>
<!-- saved from url=(0042)http://192.168.35.3:84/file_index/ucf.html -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    

    <title>ucf</title>
<style type="text/css">@charset "utf-8"; /*css文件编码*/

/*字体设置 */
/*衬线字体serif*/
/*非衬线字体Sans-serif*/
/*等宽字体monospace*/

html{
    font-family: Calibri, SimSun, serif; /*设置字体*/
    font-size: 17px; /*body字体大小*/
}
body {
    font-family: Calibri, SimSun, serif; /*设置字体*/
}

table {
    font-family: Calibri, SimSun, serif; /*设置字体*/
}

code {
    font-family: Calibri, SimSun, serif; /*设置字体*/
}

span{
    font-family: Calibri, SimSun, serif; /*设置字体*/
}

.language-css, .language-shell, .language-json,.language-ruby {
    font-family: Calibri, SimSun, serif; /*设置字体*/
}

pre{
    font-family: Calibri, SimSun, serif; /*设置字体*/
}

html {
    background: #e4e4e4; /*页面背景色灰色*/
}

body {
    max-width: 66em; /*body宽度*/
    max-width: 75%; /*body宽度*/
    padding: 0 3em; /*body的内边距*/
    border: .1em solid #bbb; /*边框大小、样式、颜色*/
    margin: auto; /*外边距*/
    background-color: white; /*背景颜色*/
    box-shadow: 0 0 5px 5px #bbb; /*阴影大小颜色*/
}

p{
    line-height: 1.5em; /*p 等元素的行高*/
}

li{
    line-height: 1em; /*li 等元素的行高*/
}

h1 {
    font-size: 1.8em; /*h1的字体大小*/
    margin: 1em 0 1.1em; /*h1的外边距*/
}

h2 {
    font-size: 1.6em; /*h1的字体大小*/
    margin: 1em 0 1.1em; /*h1的外边距*/
}

h3 {
    font-size: 1.4em; /*h1的字体大小*/
    margin: 1.2em 0 .80em; /*h1的外边距*/
}

.language-css, .language-shell, .language-json,.language-ruby, p, table, figure, pre {
    margin: 1em 3em; /*p等元素外边距*/
}

.highlight {
    margin: 0;
}

li p {
    margin-left: 0; /*列表下p元素左外边距为0*/
}

ul, ol {
    margin: 1em 3em; /*列表的外边距*/
    padding-inline-start: 0; /*取消列表默认的内边距40px*/
}

ol li {
    margin: 1em 0 0 1em; /*有序列表下列表项的边距*/
}

ul li, ul ol li {
    margin: .5em 0 0 1em; /*无序列表下列表项的边距&无序列表下的有序列表的列表项的边距*/
}

ul li p, ul ul li, table li { /*各列表项的上下边距*/
    margin-top: .3em;
    margin-bottom: .3em;
}

ul ul, ol ul, table ul {
    margin: 0 1.5%; /*子列表的外边距*/
}

h1, h2, h3, h4, h5, h6, strong, dt {
    font-weight: bold; /*h1等元素加粗显示*/
}

th {
    font-weight: bold; /*表格表头加粗显示*/
    text-align: center; /*表格表头文本居中对齐*/
}

th, td {
    border: 1px solid #bbb; /*表格边框大小颜色（有边框）*/
    padding: .5em; /*单元格内边距*/
}

.noborder th, .noborder td {
    border: 0px solid #bbb; /*表格边框大小颜色（无边框）*/
    padding: .5em; /*单元格内边距*/
}

ol li {
    list-style: decimal outside; /*无序列表图标数字*/
}

ul li {
    list-style: disc outside; /*无序列表图标实心方块*/
}

/*#toc li {
    list-style: none outside;
}*/

/*pre code{
  display:inline-block;!*代码块背景色统一*!
  !*color: #75715e;!*代码块背景色*!*!
  background-color: #49483e;
  padding:10px;!*代码块内边距*!
}*/

body > pre {
    /*display: inline-block; !*代码块背景色统一*!*/
    color: #75715e;/*代码块字体颜色*/
    background-color: rgb(242, 242, 242);
    padding:10px;/*代码块内边距*/
    border:1px solid rgb(231, 234, 237);
}

/*code {
    font-size: 14px;
}*/

code table, code th, code td {
    margin: 0;
    padding: 0;
    border: 0 solid #bbb;
}

figure > table {
    margin: 0; /*figure元素下的表格无边距*/
}

table {
    border-collapse: collapse; /*单元格合并边框*/
    overflow: auto; /*表格溢出显示滚动条*/
}

td {
    padding: 0.25em; /*单元格内边距*/
}

thead {
    background-color: rgb(218, 218, 218); /*表格表头背景色*/
}

tr:nth-child(2n) {
    background: rgb(232, 231, 231); /*表格偶数行颜色设置*/
}

hr {
    border-color: rgb(197, 197, 197); /*分割线颜色*/
}

blockquote {/*引用样式设置*/
    border-left: 4px solid rgb(223, 226, 229);
    padding: 0px 15px;
    color: rgb(119, 119, 119);
}

blockquote > p{
    margin:0;/*引用下面的段落无外边距*/
}


ul ul li, ol ul li {/*列表头样式*/
    list-style: circle
}.highlight table td { padding: 5px; }
.highlight table pre { margin: 0; }
.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf {
  color: #75715e;
  font-style: italic;
}
.highlight .cm {
  color: #75715e;
  font-style: italic;
}
.highlight .c1 {
  color: #75715e;
  font-style: italic;
}
.highlight .cp {
  color: #75715e;
  font-weight: bold;
}
.highlight .cs {
  color: #75715e;
  font-weight: bold;
  font-style: italic;
}
.highlight .err {
  color: #960050;
  background-color: #1e0010;
}
.highlight .gi {
  color: #ffffff;
  background-color: #324932;
}
.highlight .gd {
  color: #ffffff;
  background-color: #493131;
}
.highlight .ge {
  color: #000000;
  font-style: italic;
}
.highlight .gr {
  color: #aa0000;
}
.highlight .gt {
  color: #aa0000;
}
.highlight .gh {
  color: #999999;
}
.highlight .go {
  color: #888888;
}
.highlight .gp {
  color: #555555;
}
.highlight .gs {
  font-weight: bold;
}
.highlight .gu {
  color: #aaaaaa;
}
.highlight .k, .highlight .kv {
  color: #66d9ef;
  font-weight: bold;
}
.highlight .kc {
  color: #66d9ef;
  font-weight: bold;
}
.highlight .kd {
  color: #66d9ef;
  font-weight: bold;
}
.highlight .kp {
  color: #66d9ef;
  font-weight: bold;
}
.highlight .kr {
  color: #66d9ef;
  font-weight: bold;
}
.highlight .kt {
  color: #66d9ef;
  font-weight: bold;
}
.highlight .kn {
  color: #f92672;
  font-weight: bold;
}
.highlight .ow {
  color: #f92672;
  font-weight: bold;
}
.highlight .o {
  color: #f92672;
  font-weight: bold;
}
.highlight .mf {
  color: #ae81ff;
}
.highlight .mh {
  color: #ae81ff;
}
.highlight .il {
  color: #ae81ff;
}
.highlight .mi {
  color: #ae81ff;
}
.highlight .mo {
  color: #ae81ff;
}
.highlight .m, .highlight .mb, .highlight .mx {
  color: #ae81ff;
}
.highlight .se {
  color: #ae81ff;
}
.highlight .sb {
  color: #e6db74;
}
.highlight .sc {
  color: #e6db74;
}
.highlight .sd {
  color: #e6db74;
}
.highlight .s2 {
  color: #e6db74;
}
.highlight .sh {
  color: #e6db74;
}
.highlight .si {
  color: #e6db74;
}
.highlight .sx {
  color: #e6db74;
}
.highlight .sr {
  color: #e6db74;
}
.highlight .s1 {
  color: #e6db74;
}
.highlight .ss {
  color: #e6db74;
}
.highlight .s, .highlight .sa, .highlight .dl {
  color: #e6db74;
}
.highlight .na {
  color: #a6e22e;
}
.highlight .nc {
  color: #a6e22e;
  font-weight: bold;
}
.highlight .nd {
  color: #a6e22e;
  font-weight: bold;
}
.highlight .ne {
  color: #a6e22e;
  font-weight: bold;
}
.highlight .nf, .highlight .fm {
  color: #a6e22e;
  font-weight: bold;
}
.highlight .no {
  color: #66d9ef;
}
.highlight .bp {
  color: #f8f8f2;
}
.highlight .nb {
  color: #f8f8f2;
}
.highlight .ni {
  color: #f8f8f2;
}
.highlight .nn {
  color: #f8f8f2;
}
.highlight .vc {
  color: #f8f8f2;
}
.highlight .vg {
  color: #f8f8f2;
}
.highlight .vi {
  color: #f8f8f2;
}
.highlight .nv, .highlight .vm {
  color: #f8f8f2;
}
.highlight .w {
  color: #f8f8f2;
}
.highlight .nl {
  color: #f8f8f2;
  font-weight: bold;
}
.highlight .nt {
  color: #f92672;
}
.highlight {
  color: #f8f8f2;
  background-color: #49483e;
}</style>
  </head>

  <body>

<p><strong></strong></p><center><strong><font size="19">ucf/linux手册</font></strong></center><p></p>

<center>夏小进</center>
<center>13637052630</center>
<center>xiaojin2630@163.com</center>

<p>编译日期: 2019-10-25 17:29:05 +0800</p>

<p><strong>导航</strong></p>

<hr>

<ul id="toc">
  <li><a href="http://192.168.35.3:84/file_index/ucf.html#section" id="toc-section">1 简介</a>    <ul>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-1" id="toc-section-1">1.1 组成</a></li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-2" id="toc-section-2">1.2 用途</a></li>
    </ul>
  </li>
  <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-3" id="toc-section-3">2 特性</a></li>
  <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-4" id="toc-section-4">3 系统安装</a>    <ul>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-5" id="toc-section-5">3.1 如何获取</a></li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-6" id="toc-section-6">3.2 安装</a>        <ul>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#u" id="toc-u">3.2.1 手工制作可启动的U盘</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#domcf" id="toc-domcf">3.2.2 制作可启动的DOM盘或CF卡</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-7" id="toc-section-7">4 系统配置</a>    <ul>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#rclocal" id="toc-rclocal">4.1 rc.local文件</a></li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#passwd" id="toc-passwd">4.2 passwd说明</a></li>
    </ul>
  </li>
  <li><a href="http://192.168.35.3:84/file_index/ucf.html#ipkg" id="toc-ipkg">5 ipkg使用</a>    <ul>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-8" id="toc-section-8">5.1 简介</a></li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-9" id="toc-section-9">5.2 用法</a>        <ul>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-10" id="toc-section-10">5.2.1 更新源</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-11" id="toc-section-11">5.2.2 显示软件包信息</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-12" id="toc-section-12">5.2.3 安装软件包</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-13" id="toc-section-13">5.2.4 显示已安装的软件包</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-14" id="toc-section-14">5.2.5 删除已安装的软件包</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-15" id="toc-section-15">5.2.6 显示软件包安装后有哪些文件</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-16" id="toc-section-16">6 命令工具参考手册</a>    <ul>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-17" id="toc-section-17">6.1 系统自带命令</a>        <ul>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ftpd--ftp-" id="toc-ftpd--ftp-">ftpd （简易匿名 FTP 服务器）</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#httpd--http-" id="toc-httpd--http-">httpd （简易 HTTP 服务器）</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ifconfig-" id="toc-ifconfig-">ifconfig (配置查看网络接口)</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ip" id="toc-ip">ip</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ipcalcip" id="toc-ipcalcip">ipcalc（IP地址计算工具）</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#lsmod" id="toc-lsmod">lsmod（显示当前加载的模块）</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#modprobe" id="toc-modprobe">modprobe</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#netstat" id="toc-netstat">netstat（显示网络状态信息）</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ping" id="toc-ping">ping（查看主机是否在线）</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ping6" id="toc-ping6">ping6</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#rmmod" id="toc-rmmod">rmmod（移除加载的模块）</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#route" id="toc-route">route（查看设置路由）</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#sartop" id="toc-sartop">sartop</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#sort" id="toc-sort">sort</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#telnetd-telnet" id="toc-telnetd-telnet">telnetd (简易的telnet服务器)</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#tftp" id="toc-tftp">tftp</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#tftpd" id="toc-tftpd">tftpd</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#traceroute" id="toc-traceroute">traceroute</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#top" id="toc-top">top</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#udhcpc" id="toc-udhcpc">udhcpc</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#udhcpd" id="toc-udhcpd">udhcpd</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#umount" id="toc-umount">umount</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#wget" id="toc-wget">wget</a></li>
        </ul>
      </li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-18" id="toc-section-18">6.2 系统扩展命令</a>        <ul>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#checkdslog" id="toc-checkdslog">check_dslog</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#e2fsck" id="toc-e2fsck">e2fsck</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#e2label" id="toc-e2label">e2label</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ethtool" id="toc-ethtool">ethtool</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#fping--ping" id="toc-fping--ping">fping  (快速ping)</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ftp" id="toc-ftp">ftp</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ldd" id="toc-ldd">ldd</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#logit" id="toc-logit">logit</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#lspci" id="toc-lspci">lspci</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#mkfsreiserfs" id="toc-mkfsreiserfs">mkfs.reiserfs</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#mke2fs" id="toc-mke2fs">mke2fs</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#mkfsext3" id="toc-mkfsext3">mkfs.ext3</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#parted" id="toc-parted">parted</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#sar" id="toc-sar">sar</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#scp" id="toc-scp">scp</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#sendmail" id="toc-sendmail">sendmail</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#ssh" id="toc-ssh">ssh</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#sshd" id="toc-sshd">sshd</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#tcpdump" id="toc-tcpdump">tcpdump</a></li>
        </ul>
      </li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-19" id="toc-section-19">6.3 扩展软件包</a>        <ul>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#curl" id="toc-curl">curl</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#dnsutils" id="toc-dnsutils">dns_utils</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#dnsmasq" id="toc-dnsmasq">dnsmasq</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#floodhttp" id="toc-floodhttp">flood_http</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#gnunetcat" id="toc-gnunetcat">GNU/netcat</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#nginx" id="toc-nginx">nginx</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#gnuwget" id="toc-gnuwget">GNU/wget</a></li>
          <li><a href="http://192.168.35.3:84/file_index/ucf.html#webbench" id="toc-webbench">webbench</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="http://192.168.35.3:84/file_index/ucf.html#faq" id="toc-faq">7 FAQ</a>    <ul>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#linux" id="toc-linux">7.1 为什么会创建这么一个精剪的小型linux</a></li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#ucflnux" id="toc-ucflnux">7.2 ucf/lnux的目前使用现状</a></li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#ucflinux" id="toc-ucflinux">7.3 我在其它机器上编译的二进制在ucf/linux却无法运行</a></li>
      <li><a href="http://192.168.35.3:84/file_index/ucf.html#ucflinux-1" id="toc-ucflinux-1">7.4 我想要运行某个程序，ucf/linux却没有</a></li>
    </ul>
  </li>
  <li><a href="http://192.168.35.3:84/file_index/ucf.html#section-20" id="toc-section-20">8 更新历史</a></li>
</ul>

<h2 id="section">1 简介</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">名称</th>
      <th style="text-align: center">时间</th>
      <th style="text-align: center">作者</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">ucf/linux</td>
      <td style="text-align: center">2009-xxx — 2016-0818</td>
      <td style="text-align: center">夏小进</td>
    </tr>
  </tbody>
</table>

<p>ucf/linux 是为了方便本部门（研发中心测试部）使用而定制编写的小型linux系统。</p>

<p>它支持将系统安装进DOM盘，CF卡和硬盘里，或使用U盘直接启动。</p>

<p>ucf/linux名称由来：u就是U盘; cf就是CF卡。可以装进U盘和CF卡的linux。</p>

<p>有linux使用经验的人都知，linux也需要一引导加载器支持，目前常见的有lilo, grub等。虽然grub已经是version 2.0了，但体积过大，配置过于复杂，所以本人一直在使用grub 0.97版本。</p>

<blockquote>
  <p>目前最新版本 version 3.0</p>
</blockquote>

<h3 id="section-1">1.1 组成</h3>

<ul>
  <li>grub 0.97</li>
  <li>bzImage ( linux kernel文件)</li>
  <li>rootfs  ( linux rootfs根文件系统)</li>
  <li>ipkg软件仓库</li>
</ul>

<p>grub/menu.lst 文件内容</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre></td><td class="rouge-code"><pre> <span class="nb">timeout </span>10                                
 default 2                                 
                                          
 title ucf/linux-v3.0                     
    root <span class="o">(</span>hd0, 0<span class="o">)</span>                         
    kernel /boot/bzImage <span class="nv">console</span><span class="o">=</span>tty0
    initrd /boot/rootfs-3.0         
</pre></td></tr></tbody></table></code></pre></div></div>

<h3 id="section-2">1.2 用途</h3>

<p><strong>需要ucf/linux的时候</strong></p>

<ul>
  <li>临时新加一个测试环境,需要上下的测试；</li>
  <li>临时需要一个测试机，而根本没有时间新做一台linux发行版系统；</li>
  <li>充分利用老的电脑；</li>
  <li>需要生成测试流量；</li>
  <li>硬盘紧张的情况下；</li>
</ul>

<p><strong>不需要ucf/linux的时候</strong></p>

<ul>
  <li>指定需要一台windows系统;</li>
  <li>一台全功能的GNU/Linux系统；</li>
</ul>

<h2 id="section-3">2 特性</h2>

<ul>
  <li>体积小 （加内核在一起约 5M）</li>
  <li>安装方便, 一条dd命令即可</li>
  <li>默认包含常见的小工具(ssh, sshd, ftp, tcpdump, sartop …)</li>
  <li>自带发流量的工具(sod, fnd)</li>
  <li>支持U、CF、DOM、硬盘启动</li>
  <li>文件系统运行在内存中</li>
  <li>支持配置信息保存(如root密码，ipkg 安装的软件包)</li>
  <li>支持扩展软件包安装</li>
  <li>支持COM（比特率38400）， GRUB菜单编辑及登陆；</li>
  <li>支持添加 kernel cmdline更改启动后的配置行为</li>
  <li>支持ifconfig显示接口类型（光口还是电口）</li>
  <li>支持ifconfig显示接口的链路状态（全双工还是半双工）</li>
</ul>

<h2 id="section-4">3 系统安装</h2>

<h3 id="section-5">3.1 如何获取</h3>

<h3 id="section-6">3.2 安装</h3>

<h4 id="u">3.2.1 手工制作可启动的U盘</h4>

<p>找一台启动好的ucf/linux系统，将U盘接上。 假设U盘(FAT32)识别为/dev/sda /dev/sda1, grub中识别为hd1。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre><span class="c"># mount /dev/sda1 /mnt/tmp</span>
<span class="c"># cp -a /boot /mnt/tmp</span>
<span class="c"># vi /mnt/tmp/boot/grub/menu.lst</span>
   添加 root <span class="o">(</span>hd1, 0<span class="o">)</span>等相关记录

<span class="c"># grub </span>
   grub <span class="o">&gt;</span> root <span class="o">(</span>hd1, 0<span class="o">)</span>
   grub <span class="o">&gt;</span> setup <span class="o">(</span>hd1<span class="o">)</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="domcf">3.2.2 制作可启动的DOM盘或CF卡</h4>
<p>首先将 ucf/linux系统镜像文件(ucf-3.0.img)下载到随便一台linux系统中（只要有dd命令即可）。</p>

<p>假设U盘(FAT32)识别为/dev/sda。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
</pre></td><td class="rouge-code"><pre><span class="c"># dd if=/tmp/ucf-3.0.img of=/dev/sda </span>
<span class="c"># reboot </span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h2 id="section-7">4 系统配置</h2>

<p>ucf/linux从 version 3.0以来，使用3.2.2方式制作的系统启动好后，默认是划分两个分区，一个boot分区，一个是data分区（最大不超过2G）.</p>

<p>data分区默认是 mount在 /data目录下,同时会自动创建 /data/local目录，下还有etc、bin、log等目录</p>

<p>data分区用于存放ucf/linux自身的一些配置信息及用户自己的数据文件。</p>

<h3 id="rclocal">4.1 rc.local文件</h3>

<p>一般的GNU/Linux发行版都有一个/etc/rc.local文件，用于在系统启动好后，自动执行此文件中的一些命令。</p>

<p>ucf/linux也支持这种工作方式，可将命令放入/data/etc/rc.local中即可。</p>

<h3 id="passwd">4.2 passwd说明</h3>

<p>ucf/linux启动好后，默认的帐号是 root/zxsofttest。可自行更改密码，密码文件存放于 /data/etc/passwd。</p>

<h2 id="ipkg">5 ipkg使用</h2>

<h3 id="section-8">5.1 简介</h3>

<p>ipkg 是一个轻量化的包管理系统,它被设计用于嵌入式设备中管理软件包的工具。关于其用法，可以输入: root # ipkg –help  得到详细信息.</p>

<p>ipkg  中关于软件包的信息是保存在一个文件夹中，每安装或删除软件包，都会更新这个文件夹中相关的文件。</p>

<p>这个文件夹是  /data/etc/ipkg ,里面有  lists,info,status。 
安装的软件包默认会放在  /data/local  或  /data/etc  文件夹下:<br>
二进制文件放在  /data/local/bin  下;  库文件放在  /data/local/lib  下。 
由于是存放在  /data/etc 下，所以安装的软件包，在系统重启后也仍然存在</p>

<h3 id="section-9">5.2 用法</h3>

<p>要使用 ipkg  安装软件包，首先得配置软件包的源(和 debian 系统中的 apt-get 比较类似.)</p>

<p>/etc/ipkg.conf ,它只是/data/etc/ipkg.conf的一个链接。 
此文件类似于 debian  中的  /etc/apt/sources.list  文件，只是语法不同而已。如 下图：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
</pre></td><td class="rouge-code"><pre><span class="o">[</span> ipkg <span class="o">]</span><span class="c"># cat /etc/ipkg.conf   </span>
src/gz base http://172.18.2.5/rootfs/ipkg   
<span class="c">#src/gz base http://172.18.2.5/rootfs/ipkg   </span>
</pre></td></tr></tbody></table></code></pre></div></div>

<p>一般以 src 或 src/gz 开头 , 如 果 有 gz 的话， ipkg  会下载 http://172.18.2.5/ipkg/Packages.gz  文件,如果没有/gz</p>

<p>它就会下载  http://172.18.2.5/ipkg/Package  文件.  base 是源中软件包所属的类</p>

<p>别，像有的软件包会被划为开发类的，那它的类别可能就是  dev  了。从此配置文件中可以看出,软件包是在
rootfs/ipkg目录下.</p>

<h4 id="section-10">5.2.1 更新源</h4>
<p>当源配置好后，需使用  ipkg update文件更新源，也就是ipkg要下载  ipkg.conf
中设置的源软件包信息描述文件: 
Packages或  Packages.gz 文件。如下：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
</pre></td><td class="rouge-code"><pre><span class="o">[</span> ipkg <span class="o">]</span><span class="c"># ipkg update </span>
Downloading http://172.18.2.5/rootfs/ipkg/Packages.gz 
Inflating http://172.18.2.5/rootfs/ipkg/Packages.gz 
Updated list of available packages <span class="k">in</span> /config/ipkg/lists/base 
Successfully terminated.   
</pre></td></tr></tbody></table></code></pre></div></div>

<p>这时可以使用  ipkg list  查到当前有哪些软件包可以被安装使用:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre></td><td class="rouge-code"><pre><span class="o">[</span> ipkg <span class="o">]</span> <span class="c"># ipkg list   </span>
<span class="c">#[软件名    版本    软件包简单描述] </span>
cloader - 0.53 - a HTTP、HTTPS、FTP tester,LogSize<span class="o">=</span>10MB. 
iperf - 2.0.5 - this is iperf-loader. 
libssl - 0.9.8 - this is libssl.so 
libstdc++ - 6.0.16 - this is libstdc++ 
lynx - 2.8.7 - this is lynx <span class="nb">.</span> 
netperf - 2.5.0 - this is Netperf-loader. 
webbench - 1.5 - this is webbench web tester.   9 
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="section-11">5.2.2 显示软件包信息</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="rouge-code"><pre><span class="o">[</span> /root <span class="o">]</span><span class="c"># ipkg info cloader </span>
Package: cloader 
Version: 0.53 
Depends: libssl 
Status: <span class="nb">install </span>user installed 
Section: base 
Architecture: i686 
maintainer: xiaxiaojin@safefw.com 
MD5Sum: 3592a7ad60ff03b33d50c21909426c2b 
Size: 330772 
Filename: cloader_0.53_i686.ipk 
Source: http://xiaojin.xiaojin 
Description: a HTTP、HTTPS、FTP tester,LogSize<span class="o">=</span>10MB. 
Successfully terminated. 
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="section-12">5.2.3 安装软件包</h4>

<p>有两种方式:</p>

<ul>
  <li>直接使用 ipkg install webbench 安装</li>
</ul>

<p>它会自动下载 webbench.ipkg文件下来，再执行安装。</p>

<p>如:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre><span class="o">[</span> ipkg <span class="o">]</span> <span class="c"># ipkg install cloader </span>
Installing cloader <span class="o">(</span>0.53<span class="o">)</span> to root... 
 Downloading http://172.18.2.5/rootfs/ipkg/cloader_0.53_i686.ipk 
Installing libssl <span class="o">(</span>0.9.8<span class="o">)</span> to root... 
Downloading http://172.18.2.5/rootfs/ipkg/libssl_0.9.8_i686.ipk 
Configuring cloader 
Configuring libssl 
Successfully terminated. 
</pre></td></tr></tbody></table></code></pre></div></div>

<p>可以看到，ipkg  还下载  安装了  libssl。因为  cloader软件是依赖libssl 的。
(通过  ipkg info cloader  可以看到  Depends: libssl)</p>

<ul>
  <li>下载 ipk 包</li>
</ul>

<p>用 ipkg install abc.ipkg安装</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre></td><td class="rouge-code"><pre><span class="o">[</span> /root <span class="o">]</span><span class="c"># wget http://172.18.2.5/rootfs/ipkg/cloader_0.53_i686.ipk </span>
Connecting to 172.18.2.5 <span class="o">(</span>172.18.2.5:80<span class="o">)</span> 
cloader_0.53_i686.ip 100% 
|<span class="k">**********************************************</span>| 323k  0:00:00 ETA 
      
<span class="o">[</span> /root <span class="o">]</span><span class="c">#  ipkg install cloader_0.53_i686.ipk   </span>
Installing cloader <span class="o">(</span>0.53<span class="o">)</span> to root... 
Configuring cloader 
Successfully terminated.   10 
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="section-13">5.2.4 显示已安装的软件包</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
</pre></td><td class="rouge-code"><pre><span class="o">[</span> ipkg <span class="o">]</span> <span class="c"># ipkg list_installed </span>
cloader - 0.53 -   
libssl - 0.9.8 -   
Successfully terminated. 
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="section-14">5.2.5 删除已安装的软件包</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
</pre></td><td class="rouge-code"><pre><span class="o">[</span> /root <span class="o">]</span><span class="c"># ipkg remove cloader </span>
Removing package cloader from root... 
Successfully terminated. 
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="section-15">5.2.6 显示软件包安装后有哪些文件</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
</pre></td><td class="rouge-code"><pre><span class="o">[</span> ipkg <span class="o">]</span> <span class="c"># ipkg files cloader   </span>
Package cloader <span class="o">(</span>0.53<span class="o">)</span> is installed on root and has the following files: 
/data/etc/cloader.conf 
/data/local/bin/cloader 
Successfully terminated. 
</pre></td></tr></tbody></table></code></pre></div></div>

<h2 id="section-16">6 命令工具参考手册</h2>

<p>对ucf/linux的命令工具介绍，下文中主要分成三部分。</p>

<p>第1部分是系统自带的命令；</p>

<p>第2部分中的命令工具，其中有部分是本人从头编写的。 另一部分是目前常见的开源工具；</p>

<p>第3部分中的命令工具，均是自己将开源工具重新编译，打包成ipkg格式，供ucf/linux扩展使用的。
所以使用ipkg 安装的软件包，命令文件均要从/data/loca/中寻找。</p>

<h3 id="section-17">6.1 系统自带命令</h3>

<h4 id="ftpd--ftp-">ftpd （简易匿名 FTP 服务器）</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
</pre></td><td class="rouge-code"><pre>ftpd <span class="o">[</span><span class="nt">-wvS</span><span class="o">]</span> <span class="o">[</span><span class="nt">-t</span> N] <span class="o">[</span><span class="nt">-T</span> N] <span class="o">[</span>DIR]
参数:
<span class="nt">-w</span>	允许上传
<span class="nt">-v</span>	日志记录到 stderr
<span class="nt">-S</span>	日志记录到 syslog
<span class="nt">-t</span>,-T	空闲和超时设置
DIR	改变根目录
示例：
	ftpd要配合 tcpsvd 使用：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#tcpsvd -vE 0.0.0.0 21 ftpd /tmp</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="httpd--http-">httpd （简易 HTTP 服务器）</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="rouge-code"><pre>httpd <span class="o">[</span><span class="nt">-ifv</span><span class="o">[</span>v]] <span class="o">[</span><span class="nt">-c</span> CONFFILE] <span class="o">[</span><span class="nt">-p</span> <span class="o">[</span>IP:]PORT] <span class="o">[</span><span class="nt">-u</span> USER[:GRP]] <span class="o">[</span><span class="nt">-r</span> REALM] <span class="o">[</span><span class="nt">-h</span> HOME] or httpd <span class="nt">-d</span>/-e/-m STRING
参数:
<span class="nt">-I</span>	Inetd mode
<span class="nt">-f</span>	Do not daemonize
<span class="nt">-v</span><span class="o">[</span>v]	Verbose
<span class="nt">-c</span> FILE	配置文件 <span class="o">(</span>默认 httpd.conf<span class="o">)</span>
<span class="nt">-p</span> <span class="o">[</span>IP:]PORT	绑定 ip:port <span class="o">(</span>default 80<span class="o">)</span>
<span class="nt">-u</span> USER[:GRP]	绑定IP/端口号后设置 uid/gid
<span class="nt">-r</span> REALM	用于基本身份验证的认证
<span class="nt">-h</span> HOME	网站根目录 <span class="o">(</span>默认 .<span class="o">)</span>
<span class="nt">-m</span> STRING	MD5 crypt STRING
<span class="nt">-e</span> STRING	HTML encode STRING
<span class="nt">-d</span> STRING	URL decode STRING
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c"># httpd -p 172.16.12.190:8080 -h /tmp</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<p>若要实现cgi功能，则 mkdir /tmp/cgi-bin 将x.cgi放入cgi-bin中, chmod +x x.cgi</p>

<h4 id="ifconfig-">ifconfig (配置查看网络接口)</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="rouge-code"><pre>ifconfig <span class="o">[</span><span class="nt">-a</span><span class="o">]</span> interface <span class="o">[</span>address]
选项:
        <span class="o">[</span>add ADDRESS[/PREFIXLEN]]
        <span class="o">[</span>del ADDRESS[/PREFIXLEN]]
        <span class="o">[[</span>-]broadcast <span class="o">[</span>ADDRESS]] <span class="o">[[</span>-]pointopoint <span class="o">[</span>ADDRESS]]
        <span class="o">[</span>netmask ADDRESS] <span class="o">[</span>dstaddr ADDRESS]
        <span class="o">[</span>outfill NN] <span class="o">[</span>keepalive NN]
        <span class="o">[</span>hw ether|infiniband ADDRESS] <span class="o">[</span>metric NN] <span class="o">[</span>mtu NN]
        <span class="o">[[</span>-]trailers] <span class="o">[[</span>-]arp] <span class="o">[[</span>-]allmulti]
        <span class="o">[</span>multicast] <span class="o">[[</span>-]promisc] <span class="o">[</span>txqueuelen NN] <span class="o">[[</span>-]dynamic]
        <span class="o">[</span>mem_start NN] <span class="o">[</span>io_addr NN] <span class="o">[</span>irq NN]
        <span class="o">[</span>:up|down] ...
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="rouge-code"><pre>添加一个IPv4地址,并启动：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#ifconfig add eth3 192.168.13.190/24 up</span>

添加一个IPv6地址,并启动：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#ifconfig eth3 add 2001::209:a3ff:feff:ad/64 up</span>

启动一个网卡：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#ifconfig eth3 up</span>

关闭一个网卡：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#ifconfig eth3 down</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="ip">ip</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre></td><td class="rouge-code"><pre>ip <span class="o">[</span>OPTIONS] <span class="o">{</span>address | route | <span class="nb">link</span> | tunnel | rule<span class="o">}</span> <span class="o">{</span>COMMAND<span class="o">}</span>
ip <span class="o">[</span>OPTIONS] 动作 <span class="o">{</span>命令<span class="o">}</span> where OBJECT :<span class="o">=</span> <span class="o">{</span>address | route | <span class="nb">link</span> | tunnel | rule<span class="o">}</span> OPTIONS :<span class="o">=</span> <span class="o">{</span> <span class="nt">-f</span><span class="o">[</span>amily] <span class="o">{</span> inet | inet6 | <span class="nb">link</span> <span class="o">}</span> | <span class="nt">-o</span><span class="o">[</span>neline] <span class="o">}</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<p>动作：就是是可以针对哪些网络参数进行动作，包括有：
link ：	关于设备 (device) 的相关设定，包括 MTU, MAC 地址等等
addr/address ：	关于额外的 IP 设定，示例多 IP 的实现等等；
route ：	与路由有关的相关设定</p>

<ul>
  <li>关于设备(device) 的相关设定： ip link 
ip link 可以设定与设备 (device) 有关的相关设定，包括 MTU 以及该网络设备的 MAC 等， 当然也可以启动 (up) 或关闭 (down) 某个网络设备。整个语法是这样的：</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c">#ip link show &lt;== 单纯的查阅该设备相关的信息</span>
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#ip link set [device] [动作与参数]</span>
参数：
show：	仅显示出这个设备的相关内容，如果加上 <span class="nt">-s</span> 会显示更多统计数据；
<span class="nb">set</span> ：	可以开始设定项目， device 指的是 eth0, eth1 等等设备代号；
动作与参数：包括以下动作：
up|down ：启动 <span class="o">(</span>up<span class="o">)</span> 或关闭 <span class="o">(</span>down<span class="o">)</span> 某个设备，其他参数使用预设的以太网参数；
address ：	如果这个设备可以更改 MAC ，用这个参数修改；
name ：	给予这个设备一个特殊的名字；
mtu ：	设置最大传输单元。 
</pre></td></tr></tbody></table></code></pre></div></div>

<ul>
  <li>关于额外的 IP 相关设定： ip address</li>
</ul>

<p>如果说 ip link 是与 OSI 七层模型的第二层数据链路层有关的话，那么 ip address (ip addr) 就是与第三层网络层有关的了。主要是在设定与 IP 有关的各项参数，包括 netmask, broadcast 等等。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c"># ip address show   &lt;==查看IP参数</span>
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ip address [add|del] [IP参数] [dev 设备名] [相关参数]</span>
参数：
show  ：	单纯的显示出设备的 IP 信息；
add|del ：	进行相关参数的增加 <span class="o">(</span>add<span class="o">)</span> 或删除 <span class="o">(</span>del<span class="o">)</span> 设定，主要有：
IP 参数 ：	主要就是网域的设定，示例 192.168.100.100/24 之类的设定；
dev ：	这个 IP 参数所要设定的设备，示例 eth0, eth1 等等（格式为dev eth0）；
相关参数，如下所示：
Broadcast	：设定广播位址，如果设定值是 + 表示让系统自动计算；
Label	：该设备的别名，示例eth0:0；
Scope	：这个设备的领域，通常是以下几个大类：
        	Global	：允许来自所有来源的连线；
        	Site		：仅支持IPv6 ，仅允许本主机的连接；
Link		：仅允许本设备自我连接；
Host		：仅允许本主机内部的连接；
所以当然是使用 global 了。预设也是 global
</pre></td></tr></tbody></table></code></pre></div></div>

<ul>
  <li>关于路由的设定： ip route 
这个项目就是路由的查看与设定。事实上ip route 的功能几乎与 route 这个命令一样，但是，它还可以进行额外的参数设置，示例 MTU 的规划等等，相当的强悍啊！</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c"># ip route show &lt;==单纯的显示出路由的设定</span>
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ip route [add|del] [IP或网域] [via gateway] [dev 设备]</span>
参数：
show ：		单纯的显示出路由表，也可以使用 list ；
add|del ：	增加 <span class="o">(</span>add<span class="o">)</span> 或删除 <span class="o">(</span>del<span class="o">)</span> 路由；
IP或网域	：可使用 192.168.50.0/24 之类的网域或者是单纯的 IP ；
via		：从那个 gateway 出去，不一定需要；
dev		：由那个设备连出去，需要；
mtu		：可以额外的设定 MTU 的数值； 
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="ipcalcip">ipcalc（IP地址计算工具）</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre></td><td class="rouge-code"><pre>ipcalc <span class="o">[</span>OPTIONS] ADDRESS[[/]NETMASK] <span class="o">[</span>NETMASK]
从IP address中计算 IP和掩码设置
参数:
<span class="nt">-b</span>,--broadcast	显示计算后的广播地址
<span class="nt">-n</span>,--network	显示计算后的网络地址
<span class="nt">-m</span>,--netmask	显示子网掩码
<span class="nt">-p</span>,--prefix	显示 IP/NETMASK 的前缀
<span class="nt">-h</span>,--hostname	Display first resolved host name
<span class="nt">-s</span>,--silent	Don<span class="s1">'t ever display error messages
</span></pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c"># ipcalc -nmb 192.168.100.1/30</span>
结果：
<span class="nv">NETMASK</span><span class="o">=</span>255.255.255.252
<span class="nv">BROADCAST</span><span class="o">=</span>192.168.100.3
<span class="nv">NETWORK</span><span class="o">=</span>192.168.100.0
</pre></td></tr></tbody></table></code></pre></div></div>

<p>也可使用些web功能:  http://172.16.12.253/cgi-bin/ipcalc</p>

<h4 id="lsmod">lsmod（显示当前加载的模块）</h4>

<p>显示当前已经加载的模块文件</p>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c">#lsmod</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="modprobe">modprobe</h4>

<p>modprobe可载入指定的个别模块，或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系，决定要载入哪些模块。若在载入过程中发生错误，在modprobe会卸载整组的模块</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
</pre></td><td class="rouge-code"><pre>Usage: modprobe <span class="o">[</span><span class="nt">-alrqvsDb</span><span class="o">]</span> MODULE <span class="o">[</span><span class="nv">symbol</span><span class="o">=</span>value]...
参数：
<span class="nt">-a</span>	载入全部的模块
<span class="nt">-l</span>	显示可用的模块
<span class="nt">-r</span>	模块闲置不用时，即自动卸载模块
<span class="nt">-q</span>	Quiet
<span class="nt">-v</span>	执行时显示详细的信息
<span class="nt">-s</span>	Log to syslog
<span class="nt">-D</span>	显示依赖性
<span class="nt">-b</span>	用配置文件中的blacklist命令到指定的模块名中
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>显示可用模块列表：

<span class="o">[</span>/root <span class="o">]</span> <span class="c">#modprobe –l</span>

加载模块：

<span class="o">[</span>/root <span class="o">]</span> <span class="c">#modprobe igb</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="netstat">netstat（显示网络状态信息）</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="rouge-code"><pre>netstat <span class="o">[</span><span class="nt">-laentuwxrWp</span><span class="o">]</span>
选项:
<span class="nt">-l</span>	显示当前正在侦听的套接字
<span class="nt">-a</span>	显示所有的套接字 <span class="o">(</span>default: connected<span class="o">)</span>
<span class="nt">-e</span>	显示更多的信息
<span class="nt">-n</span>	不解析主机名
<span class="nt">-t</span>	Tcp sockets
<span class="nt">-u</span>	Udp sockets
<span class="nt">-w</span>	Raw sockets
<span class="nt">-x</span>	Unix sockets
<span class="nt">-r</span>	显示路由表
<span class="nt">-W</span>	Wide display
<span class="nt">-p</span>	显示套接字的 PID/Program name 
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>查看当前监听的套接字：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#netstat –tnlp</span>

查看UDP连接：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#netstat –u</span>

显示路由表：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#netstat -r</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="ping">ping（查看主机是否在线）</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
</pre></td><td class="rouge-code"><pre>ping <span class="o">[</span>OPTIONS] HOST
linux下的ping命令用于查看网络上的主机是否在工作
选项：
<span class="nt">-4</span>, <span class="nt">-6</span>	强制解析 IPv4 or IPv6 主机名
<span class="nt">-c</span> CNT	在发送指定数目的包后停止
<span class="nt">-s</span> SIZE	指定发送的数据字节数，预设值是56，加上8字节的ICMP头，一共是64ICMP数据字节
<span class="nt">-I</span> IFACE/IP	使用指定的网络界面送出数据包
<span class="nt">-W</span> SEC	Seconds to <span class="nb">wait </span><span class="k">for </span>the first response <span class="o">(</span>default:10<span class="o">)</span> <span class="o">(</span>after all <span class="nt">-c</span> CNT packets are sent<span class="o">)</span>
<span class="nt">-w</span> SEC	Seconds <span class="k">until </span>ping exits <span class="o">(</span>default:infinite<span class="o">)</span> <span class="o">(</span>can <span class="nb">exit </span>earlier with <span class="nt">-c</span> CNT<span class="o">)</span>
<span class="nt">-q</span>	不显示任何传送封包的信息，只显示最后的结果
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c">#ping 172.16.1.1 –c 4  ==&gt;发送4个测试包后停止</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="ping6">ping6</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre></td><td class="rouge-code"><pre>ping6 <span class="o">[</span>OPTIONS] HOST
linux下的ping6令用于查看网络上的主机是否在工作
参数:
<span class="nt">-c</span> CNT	在发送指定数目的包后停止
<span class="nt">-s</span> SIZE	指定发送的数据字节数，预设值是56，加上8字节的ICMP头，一共是64ICMP数据字节
<span class="nt">-I</span> IFACE/IP	使用指定的网络界面送出数据包
<span class="nt">-q</span>	不显示任何传送封包的信息，只显示最后的结果
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="rmmod">rmmod（移除加载的模块）</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
</pre></td><td class="rouge-code"><pre>rmmod <span class="o">[</span><span class="nt">-wfa</span><span class="o">]</span> <span class="o">[</span>MODULE]...
参数：
<span class="nt">-w</span>	Wait <span class="k">until </span>the module is no longer used
<span class="nt">-f</span>	Force unload
<span class="nt">-a</span>	Remove all unused modules <span class="o">(</span>recursively<span class="o">)</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="route">route（查看设置路由）</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
</pre></td><td class="rouge-code"><pre>route <span class="o">[{</span>add|del|delete<span class="o">}]</span>
参数:
        <span class="nt">-n</span>      不解析主机名
        <span class="nt">-e</span>      显示更多的信息
        <span class="nt">-A</span> inet<span class="o">{</span>6<span class="o">}</span>      Select address family
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="rouge-code"><pre>显示IPv4路由表：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># route -ne</span>

添加一条IPv4路由表：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># route add -net 172.16.4.0/16 gw 172.16.1.1</span>

删除一个IPv4路由表：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># route del –net 172.16.4.0/16</span>

显示IPv6路由表：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># route –A inet6 或 route –A inet6 -ne</span>

添加一条IPv6路由表：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># route -A inet6 add 2033::0/64 gw 2014::93</span>

删除一个IPv6路由表：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># route -A inet6 del 2033::0/64 </span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="sartop">sartop</h4>

<p>sartop是sar 工具的一个简化命令，可以直接查看当前网络接口的流量状态
示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>查看指定的接口
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># sartop –i eth0</span>

查看全部接口
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># sartop –i all</span>

每隔10秒钟查看一次数据
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># sartop –s 10</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="sort">sort</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="rouge-code"><pre><span class="nb">sort</span> <span class="o">[</span><span class="nt">-nrugMcszbdfimSTokt</span><span class="o">]</span> <span class="o">[</span><span class="nt">-o</span> FILE] <span class="o">[</span><span class="nt">-k</span> start[.offset][opts][,end[.offset][opts]] <span class="o">[</span><span class="nt">-t</span> CHAR] <span class="o">[</span>FILE]...
将文本文件的行排序
参数:
<span class="nt">-b</span>	忽略前置空白符
<span class="nt">-c</span>	测试文件是否已经排序
<span class="nt">-d</span>	使用字典顺序排序。比较中仅考虑字母、数字和空格
<span class="nt">-f</span>	忽略大小写
<span class="nt">-g</span>	通用数值排序
<span class="nt">-I</span>	比较中忽略所有非显示字符
<span class="nt">-k</span>	指定排序关键字
<span class="nt">-M</span>	将前面3个字母依照月份的缩写进行排序
<span class="nt">-n</span>	要以数值来排序
<span class="nt">-o</span>	把排序结果输出到原文件中
<span class="nt">-t</span> CHAR	域分隔符；用非空格或tab键分隔域
<span class="nt">-r</span>	降序排序
<span class="nt">-s</span>	Stable <span class="o">(</span>don<span class="s1">'t sort ties alphabetically)
-u	输出行中去除重复行
-z	Lines are terminated by NUL, not newline
-mST	忽视了GNU兼容性
</span></pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="telnetd-telnet">telnetd (简易的telnet服务器)</h4>

<p>telnetd 就已经运行在后台了，默认监听23端口。
端口
可通过 telnetd –h 查看其它一些选项参数。</p>

<h4 id="tftp">tftp</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>tftp <span class="o">[</span>OPTIONS] HOST <span class="o">[</span>PORT]
从tftp服务器上传送或下载文件
参数:
<span class="nt">-l</span> FILE	本地文件
<span class="nt">-r</span> FILE	远程文件
<span class="nt">-g</span>	下载文件
<span class="nt">-p</span>	上传文件
<span class="nt">-b</span> SIZE 	Transfer blocks of SIZE octets
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre></td><td class="rouge-code"><pre>从tftp服务器下载文件
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tftp –g –r 172.16.12.190/ios –l /tmp/ios</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="tftpd">tftpd</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre></td><td class="rouge-code"><pre>tftpd <span class="o">[</span><span class="nt">-cr</span><span class="o">]</span> <span class="o">[</span><span class="nt">-u</span> USER] <span class="o">[</span>DIR]
创建一个简单的tftpd服务器
        udpsvd <span class="nt">-vE</span> 0.0.0.0 69 tftpd /files/to/serve
参数:
<span class="nt">-r</span>	禁止上传
<span class="nt">-c</span>	允许通过上传创建文件
<span class="nt">-u</span>	Access files as USER
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
</pre></td><td class="rouge-code"><pre>创建tftpd服务器要配合udpsvd使用
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ln –s /bin/busybox /root/tftpd</span>
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># udpsvd -vE 0.0.0.0 69 /root/tftpd /tmp</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="traceroute">traceroute</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="rouge-code"><pre>traceroute <span class="o">[</span><span class="nt">-FIldnrv</span><span class="o">]</span> <span class="o">[</span><span class="nt">-f</span> 1st_ttl] <span class="o">[</span><span class="nt">-m</span> max_ttl] <span class="o">[</span><span class="nt">-p</span> port#] <span class="o">[</span><span class="nt">-q</span> nqueries] 
	<span class="o">[</span><span class="nt">-s</span> src_addr] <span class="o">[</span><span class="nt">-t</span> tos] <span class="o">[</span><span class="nt">-w</span> <span class="nb">wait</span><span class="o">]</span> <span class="o">[</span><span class="nt">-g</span> gateway] <span class="o">[</span><span class="nt">-i</span> iface] 
	<span class="o">[</span><span class="nt">-z</span> pausemsecs] HOST <span class="o">[</span>data size]
Trace the route to HOST
参数：
<span class="nt">-F</span>	设置勿分段位
<span class="nt">-I</span>	使用ICMP回应取代UDP资料信息
<span class="nt">-l</span>	显示 ttl 值
<span class="nt">-d</span>	使用Socket层级的排错功能
<span class="nt">-n</span>	直接使用IP地址而非主机名称
<span class="nt">-r</span>	忽略普通的Routing Table，直接将数据包送到远端主机上
<span class="nt">-v</span>	详细显示指令的执行过程
<span class="nt">-m</span> max_ttl	设置检测数据包的最大存活数值TTL的大小
<span class="nt">-p</span> port#	设置UDP传输协议的通信端口<span class="o">(</span>default 33434<span class="o">)</span>
<span class="nt">-q</span> nqueries	Number of probes per <span class="s1">'ttl'</span> <span class="o">(</span>default 3<span class="o">)</span>
<span class="nt">-s</span> src_addr	设置本地主机送出数据包的IP地址
<span class="nt">-t</span> tos	设置检测数据包的TOS数值 <span class="o">(</span>default 0<span class="o">)</span>
<span class="nt">-w</span> <span class="nb">wait 	</span>设置等待远端主机回报的时间 <span class="o">(</span>default 3 sec<span class="o">)</span>
<span class="nt">-g</span>	设置来源路由网关，最多可设置8个 <span class="o">(</span>8 max<span class="o">)</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre></td><td class="rouge-code"><pre>创建tftpd服务器要配合udpsvd使用
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># udpsvd -vE 0.0.0.0 69 tftpd /tmp</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="top">top</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre></td><td class="rouge-code"><pre>top <span class="o">[</span><span class="nt">-b</span><span class="o">]</span> <span class="o">[</span><span class="nt">-nCOUNT</span><span class="o">]</span> <span class="o">[</span><span class="nt">-dSECONDS</span><span class="o">]</span> <span class="o">[</span><span class="nt">-m</span><span class="o">]</span>
Provide a view of process activity <span class="k">in </span>real time. Read the status of all processes from /proc each SECONDS and show the status <span class="k">for </span>however many processes will fit on the screen.
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="udhcpc">udhcpc</h4>
<p>DHCP客户端给网络接口配置地址</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="rouge-code"><pre>udhcpc <span class="o">[</span><span class="nt">-Cfbnqtvo</span><span class="o">]</span> <span class="o">[</span><span class="nt">-c</span> CID] <span class="o">[</span><span class="nt">-V</span> VCLS] <span class="o">[</span><span class="nt">-H</span> HOSTNAME] <span class="o">[</span><span class="nt">-i</span> INTERFACE] 
	<span class="o">[</span><span class="nt">-p</span> pidfile] <span class="o">[</span><span class="nt">-r</span> IP] <span class="o">[</span><span class="nt">-s</span> script] <span class="o">[</span><span class="nt">-O</span> dhcp-option]...
参数：
<span class="nt">-V</span>,--vendorclass<span class="o">=</span>CLASSID	Vendor class identifier
<span class="nt">-i</span>,--interface<span class="o">=</span>INTERFACE	指定接口 <span class="o">(</span>default eth0<span class="o">)</span>
<span class="nt">-H</span>,-h,--hostname<span class="o">=</span>HOSTNAME	指定客户端主机名
<span class="nt">-c</span>,--clientid<span class="o">=</span>CLIENTID	Client identifier
<span class="nt">-C</span>,--clientid-none	Suppress default client identifier
<span class="nt">-p</span>,--pidfile<span class="o">=</span>file	创建 pidfile
<span class="nt">-r</span>,--request<span class="o">=</span>IP	请求指定的IP
<span class="nt">-s</span>,--script<span class="o">=</span>file	运行已保存的脚本 <span class="o">(</span>default /usr/share/udhcpc/default.script<span class="o">)</span>
<span class="nt">-t</span>,--retries<span class="o">=</span>N	Send up to N request packets
<span class="nt">-T</span>,--timeout<span class="o">=</span>N	Try to get a lease <span class="k">for </span>N seconds <span class="o">(</span>default 3<span class="o">)</span>
<span class="nt">-A</span>,--tryagain<span class="o">=</span>N	Wait N seconds <span class="o">(</span>default 20<span class="o">)</span> after failure
<span class="nt">-O</span>,--request-option<span class="o">=</span>OPT		Request DHCP option OPT <span class="o">(</span>cumulative<span class="o">)</span>
<span class="nt">-o</span>,--no-default-options		Do not request any options <span class="o">(</span>unless <span class="nt">-O</span> is also given<span class="o">)</span>
<span class="nt">-f</span>,--foreground	前台运行
<span class="nt">-b</span>,--background 	如果没有立即获得IP则后台运行
<span class="nt">-S</span>,--syslog     Log to syslog too
<span class="nt">-n</span>,--now       Exit with failure <span class="k">if </span>lease is not immediately obtained
<span class="nt">-q</span>,--quit       Quit after obtaining lease
<span class="nt">-R</span>,--release    退出时释放IP
<span class="nt">-a</span>,--arping     Use arping to validate offered address
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre></td><td class="rouge-code"><pre>给指定接口配置IP（要想使用udhcpc把获取到的IP分配到接口上，需要一个脚本文件支持，所以首先要用ipkg <span class="nb">install </span>udhcp_conf，安装完成后，脚本文件保存在/data/etc/udhcpc.script，另外一个配置文件/data/etc/udhcpd.conf，则是作为DHCP服务器时需要的配置文件）
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># udhcpc -i eth4</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="udhcpd">udhcpd</h4>
<p>创建一个DHCP服务器</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
</pre></td><td class="rouge-code"><pre>udhcpd <span class="o">[</span><span class="nt">-fS</span><span class="o">]</span> <span class="o">[</span>configfile]
DHCP server
<span class="nt">-f</span>	Run <span class="k">in </span>foreground
<span class="nt">-S</span>	Log to syslog too
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre></td><td class="rouge-code"><pre>创建一个DHCP服务器
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># udhcpd -f /data/etc/udhcpd.conf</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="umount">umount</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>umount <span class="o">[</span>flags] FILESYSTEM|DIRECTORY
卸载一个文件系统
参数:
<span class="nt">-a</span>	卸载所有挂载过的文件系统
<span class="nt">-r</span>	Try to remount devices as read-only <span class="k">if </span>mount is busy
<span class="nt">-l</span>	Lazy umount <span class="o">(</span>detach filesystem<span class="o">)</span>
<span class="nt">-f</span>	Force umount <span class="o">(</span>i.e., unreachable NFS server<span class="o">)</span>
<span class="nt">-d</span>	Free loop device <span class="k">if </span>it has been used
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c"># umount /data/usb</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="wget">wget</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="rouge-code"><pre>wget <span class="o">[</span><span class="nt">-c</span>|--continue] <span class="o">[</span><span class="nt">-s</span>|--spider] <span class="o">[</span><span class="nt">-q</span>|--quiet] <span class="o">[</span><span class="nt">-O</span>|--output-document file] 
	<span class="o">[</span><span class="nt">--header</span> <span class="s1">'header: value'</span><span class="o">]</span> <span class="o">[</span><span class="nt">-Y</span>|--proxy on/off] <span class="o">[</span><span class="nt">-P</span> DIR] 
	<span class="o">[</span><span class="nt">-U</span>|--user-agent agent] url
从HTTP或者FTP服务器上下载文件
参数:
<span class="nt">-s</span>      Spider mode - only check file existence
<span class="nt">-c</span>      Continue retrieval of aborted transfer
<span class="nt">-q</span>      Quiet
<span class="nt">-P</span>      Set directory prefix to DIR
<span class="nt">-O</span>      Save to filename <span class="o">(</span><span class="s1">'-'</span> <span class="k">for </span>stdout<span class="o">)</span>
<span class="nt">-U</span>      Adjust <span class="s1">'User-Agent'</span> field
<span class="nt">-Y</span>      Use proxy <span class="o">(</span><span class="s1">'on'</span> or <span class="s1">'off'</span><span class="o">)</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h3 id="section-18">6.2 系统扩展命令</h3>

<h4 id="checkdslog">check_dslog</h4>

<p>用来检测jdfw 日志文件中断开的部分，快速定位死机时间段。
示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c"># check_jdfw-log  fwlog.txt</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="e2fsck">e2fsck</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="rouge-code"><pre>Usage: e2fsck <span class="o">[</span><span class="nt">-panyrcdfvstDFSV</span><span class="o">]</span> <span class="o">[</span><span class="nt">-b</span> superblock] <span class="o">[</span><span class="nt">-B</span> blocksize]
                <span class="o">[</span><span class="nt">-I</span> inode_buffer_blocks] <span class="o">[</span><span class="nt">-P</span> process_inode_size]
                <span class="o">[</span><span class="nt">-l</span>|-L bad_blocks_file] <span class="o">[</span><span class="nt">-C</span> fd] <span class="o">[</span><span class="nt">-j</span> external_journal]
                <span class="o">[</span><span class="nt">-E</span> extended-options] device
Emergency <span class="nb">help</span>:
<span class="nt">-p</span>	不询问使用者意见，便自动修复文件系统
<span class="nt">-n</span>	以只读模式开启文件系统，并采取非互动方式执行，所有的问题对话均设置以<span class="s2">"no"</span>回答
<span class="nt">-y</span>	采取非互动方式执行，所有的问题均设置以<span class="s2">"yes"</span>回答
<span class="nt">-c</span>	一并执行badblocks，以标示损坏的区块
<span class="nt">-f</span>	即使文件系统没有错误迹象，仍强制地检查正确性
<span class="nt">-v</span>	执行时显示详细的信息
<span class="nt">-b</span> superblock指定superblock，而不使用预设的superblock
<span class="nt">-B</span> blocksize	指定区块的大小，单位为字节
<span class="nt">-j</span> external_journal  Set location of the external journal
<span class="nt">-l</span> bad_blocks_file		将文件中指定的区块加到损坏区块列表
<span class="nt">-L</span> bad_blocks_file		先清除损坏区块列表，再将文件中指定的区块加到损坏区块列表。因此损坏区块列表的区块跟文件中指定的区块是一样的
</pre></td></tr></tbody></table></code></pre></div></div>

<p>它有两个软连接文件，fsck.ext2 fsck.ext3。
示例：检测一分区文件系统中的错误，并自动修复：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c">#  fsck.ext3 –y /dev/sda1 </span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="e2label">e2label</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="c"># e2label device [ New-label ]</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<p>说明：命令用来设定或显示ext2或ext3分区的卷标
主要选项：
device：分区设备名称。
New-label：新设定的卷标名称。不能超过16字符。
例如：为一个新创建的分区建立卷标名称：hdaD，使用命令：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c"># e2label /dev/hda9 hdaD</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="ethtool">ethtool</h4>

<p>说明：Ethtool是Linux下用于查询及设置网卡参数的命令</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
</pre></td><td class="rouge-code"><pre>Usage:
ethtool DEVNAME 显示设备信息
ethtool <span class="nt">-s</span>|--change DEVNAME     更改基本选项
<span class="o">[</span> speed 10|100|1000|2500|10000 <span class="o">]</span>	端口速率选项，单位是Mbps
<span class="o">[</span> duplex half|full <span class="o">]</span>	端口半双工和全双工选项
<span class="o">[</span> port tp|aui|bnc|mii|fibre <span class="o">]</span>	端口选项，默认为TP
<span class="o">[</span> autoneg on|off <span class="o">]</span>	自动协商选项，默认为on
<span class="o">[</span> advertise %%x <span class="o">]</span>	物理地址号，一般为1或0
<span class="o">[</span> phyad %%d <span class="o">]</span>	
<span class="o">[</span> xcvr internal|external <span class="o">]</span>	
<span class="o">[</span> wol p|u|m|b|a|g|s|d... <span class="o">]</span>	
<span class="o">[</span> sopass %%x:%%x:%%x:%%x:%%x:%%x <span class="o">]</span>
<span class="o">[</span> msglvl %%d <span class="o">]</span> 	
ethtool <span class="nt">-a</span>|--show-pause DEVNAME	显示相应设备中止选项设置情况
ethtool <span class="nt">-A</span>|--pause DEVNAME	对相应设备进行中止选项设置
<span class="o">[</span> autoneg on|off <span class="o">]</span>
<span class="o">[</span> rx on|off <span class="o">]</span>
<span class="o">[</span> tx on|off <span class="o">]</span>
ethtool <span class="nt">-c</span>|--show-coalesce DEVNAME	显示相应设备联合选项设置情况
ethtool <span class="nt">-C</span>|--coalesce DEVNAME	对相应设备进行联合选项设置
<span class="o">[</span>adaptive-rx on|off]	
<span class="o">[</span>adaptive-tx on|off]	
<span class="o">[</span>rx-usecs N]	
<span class="o">[</span>rx-frames N]	
<span class="o">[</span>rx-usecs-irq N]	
<span class="o">[</span>rx-frames-irq N]	
<span class="o">[</span>tx-usecs N]	
<span class="o">[</span>tx-frames N]	
<span class="o">[</span>tx-usecs-irq N]	
<span class="o">[</span>tx-frames-irq N]	
<span class="o">[</span>stats-block-usecs N]	
<span class="o">[</span>pkt-rate-low N]	
<span class="o">[</span>rx-usecs-low N]	
<span class="o">[</span>rx-frames-low N]	
<span class="o">[</span>tx-usecs-low N]	
<span class="o">[</span>tx-frames-low N]	
<span class="o">[</span>pkt-rate-high N]	
<span class="o">[</span>rx-usecs-high N]	
<span class="o">[</span>rx-frames-high N]	
<span class="o">[</span>tx-usecs-high N]	
<span class="o">[</span>tx-frames-high N]	
<span class="o">[</span>sample-interval N]	
ethtool <span class="nt">-g</span>|--show-ring DEVNAME	查询接收/发送回环参数
ethtool <span class="nt">-G</span>|--set-ring DEVNAME	设置接收/发送回环参数
<span class="o">[</span> rx N <span class="o">]</span>
<span class="o">[</span> rx-mini N <span class="o">]</span>
<span class="o">[</span> rx-jumbo N <span class="o">]</span>
<span class="o">[</span> tx N <span class="o">]</span>
ethtool <span class="nt">-k</span>|--show-offload DEVNAME	获取协议卸载信息
ethtool <span class="nt">-K</span>|--offload DEVNAME	设置协议卸载
<span class="o">[</span> rx on|off <span class="o">]</span>
<span class="o">[</span> tx on|off <span class="o">]</span>
<span class="o">[</span> sg on|off <span class="o">]</span>
<span class="o">[</span> tso on|off <span class="o">]</span>
<span class="o">[</span> ufo on|off <span class="o">]</span>
<span class="o">[</span> gso on|off <span class="o">]</span>
ethtool <span class="nt">-i</span>|--driver DEVNAME	显示相应设备的驱动信息
ethtool <span class="nt">-d</span>|--register-dump DEVNAME	寄存器转存
<span class="o">[</span> raw on|off <span class="o">]</span>
<span class="o">[</span> file FILENAME <span class="o">]</span>
ethtool <span class="nt">-e</span>|--eeprom-dump DEVNAME	EEPROM转存
<span class="o">[</span> raw on|off <span class="o">]</span>
<span class="o">[</span> offset N <span class="o">]</span>
<span class="o">[</span> length N <span class="o">]</span>
ethtool <span class="nt">-E</span>|--change-eeprom DEVNAME	更改设备EEPROM中的字节
<span class="o">[</span> magic N <span class="o">]</span>
<span class="o">[</span> offset N <span class="o">]</span>
<span class="o">[</span> value N <span class="o">]</span>
ethtool <span class="nt">-r</span>|--negotiate DEVNAME	重启N路交互
ethtool <span class="nt">-p</span>|--identify DEVNAME	显示可见的端口识别（比如相应端口指示灯会亮）
               <span class="o">[</span> TIME-IN-SECONDS <span class="o">]</span>
ethtool <span class="nt">-t</span>|--test DEVNAME	执行适配器自我测试
               <span class="o">[</span> online | offline <span class="o">]</span>
ethtool <span class="nt">-S</span>|--statistics DEVNAME显示适配器的统计信息
ethtool <span class="nt">-h</span>|--help	DEVNAME显示帮助
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="rouge-code"><pre>查询网络端口位置：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ethtool -p eth0</span>
这个命令多用于管理多网口的服务器主机，由于背板的网络端口数量大，有时候不知道那个物理端口对应eth0或其他设备号，我们就可以使用这个命令来查询。设备号eth0对应的物理端口的两个指示灯会闪烁

修改端口速率：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ethtool -s eth0 speed 1000 duplex full autoneg off</span>
将设备号eth0对应的物理端口设置为速率为1000Mbps，全双工工作模式，同时关闭自动协商。这个命令多用于手工设置网络速率，一般千兆网卡支持10|100|1000三个速率，单位是Mbps。
注：若需要永久更改有两种方法：
<span class="o">(</span>1<span class="o">)</span><span class="nb">.</span> 将上述命令写入/daa/etc/rc.local文件中，开机自动执行；
<span class="o">(</span>2<span class="o">)</span><span class="nb">.</span> 将上述命令写入/data/etc/rc.boot/rc.shell中. 
rc.boot目录没有的话，可以建个，rc.shell文件名可以随便起，必须rc.开头即可。
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="fping--ping">fping  (快速ping)</h4>

<p>fping是一与一般GNU/Linux发行版自带的ping功能不太一样的工具。ping 发送ICMP-echo报文的频率太慢，有时会考虑发送几千几万个，来了解网络的延时，丢包情况。使用ping会等待很长时间。而fping是为了解决此类问题的。支持IPv4和IPv6。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>fping <span class="o">[</span><span class="nt">-c</span> N] <span class="o">[</span><span class="nt">-i</span> &lt;send_interval&gt;] <span class="o">[</span><span class="nt">-t</span> &lt;ttl&gt;] <span class="o">[</span><span class="nt">-l</span> &lt;data_len&gt;] <span class="o">[</span><span class="nt">-s</span> &lt;data&gt;] &lt;TARGET_ADDRESS&gt;
参数:
	<span class="nt">-c</span>  count 指定发ping的个数. <span class="o">(</span>默认是6个<span class="o">)</span>
	<span class="nt">-t</span>  ttl    指定ICMP echo报文中的ttl值<span class="o">(</span>仅IPv4<span class="o">)</span><span class="nb">.</span>
<span class="nt">-i</span>        指定发送报文的时间间隔 <span class="o">(</span>默认 5ms<span class="o">)</span>
<span class="nt">-w</span>       指定等待ICMP reply报文的最大时间<span class="o">(</span>默认是300ms<span class="o">)</span>
<span class="nt">-l</span>        指定ICMP 的数据部分的长度，内容会随机生成。
<span class="nt">-s</span>        指定ICMP的数据内容，长度会在内容长度的基础上加上8字节。
</pre></td></tr></tbody></table></code></pre></div></div>

<p>在实际使用中，如果你想发送1000个ICMP ping报文，测试链路的延时、丢包率等信息。你可以使用-c 1000 表示。如果1000个报文每秒发送一个，那得20几分钟，才能发完，当然你会觉得这急人了，可以使用-i 2 让每2ms发送一个报文，这样就快的多了。</p>

<h4 id="ftp">ftp</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>ftp <span class="nt">-u</span> FTP帐号 <span class="nt">-p</span> FTP密码 <span class="nt">-P</span> FTP端口 <span class="nt">-m</span> <span class="nt">-R</span> &lt;FTP服务器IP&gt; 
说明：ftp客户端默认使用21端口进行FTP传输，使用其他端口时加参数 –P
选项:
<span class="nt">-u</span>	ftp帐户
<span class="nt">-p</span>	ftp密码
<span class="nt">-P</span>	ftp端口号
<span class="nt">-m</span>	在传之前尝试在目录位置创建目录<span class="o">(</span>用于传目录的情况<span class="o">)</span>
<span class="nt">-R</span>	递规传子目录
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="rouge-code"><pre>直接使用21端口登陆到FTP服务器：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ftp 172.16.12.190</span>

当服务器的开放端口不为默认的21端口时：
<span class="o">[</span>/root <span class="o">]</span> <span class="c">#  ftp -P 28021 172.16.12.73</span>
注意：一定要先用-P指定端口，否则会出现如下错误
NcFTP 3.0.0 <span class="o">(</span>March 20, 2000<span class="o">)</span> by Mike Gleason <span class="o">(</span>ncftp@ncftp.com<span class="o">)</span><span class="nb">.</span>
Could not open host 172.16.12.73: invalid reply from server.
Could not <span class="nb">read </span>reply from control connection: Connection refused

也可以先进入ftp视图，然后使用open 打开FTP服务器，open 命令参数：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ftp&gt;help open</span>
open: connects to a remote host.
Usage: open <span class="o">[</span><span class="nt">-flags</span><span class="o">]</span> <span class="o">[</span>sitename]
Flags:
  <span class="nt">-a</span>    : Open anonymously.
  <span class="nt">-u</span> XX : Login with username XX.
  <span class="nt">-p</span> XX : Login with password XX.
  <span class="nt">-J</span> XX : Login with account XX.
  <span class="nt">-P</span> XX : Use port number X when opening.
Examples:
  open sphygmomanometer.unl.edu
  open <span class="nt">-u</span> mario bowser.nintendo.co.jp

下载文件：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># get DEEP_GhostXP_201206.iso</span>

删除文件：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># delete DEEP_GhostXP_201206.iso</span>

查看针对某一FTP命令的帮助： 
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># help &lt;ftp命令&gt;</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="ldd">ldd</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>ldd <span class="o">[</span>OPTION]... FILE...
</pre></td></tr></tbody></table></code></pre></div></div>

<p>ldd能够显示可执行模块的dependency，其原理是通过设置一系列的环境变量，如下：LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时，任何可执行程序在运行时，它都会只显示模块的dependency，而程序并不真正执行。实际上可以直接执行ld-linux.so模块，如：/lib/ld-linux.so.2 –list program（这相当于ldd program）ldd命令使用方法。</p>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>查看ftp 所依附的模块：
<span class="o">[</span> /root <span class="o">]</span><span class="c"># ldd /sbin/ftp</span>
显示结果：
hecking sub-depends <span class="k">for</span> <span class="s1">'/lib/libgcc_s.so.1'</span>
checking sub-depends <span class="k">for</span> <span class="s1">'/lib/libc.so.0'</span>
libgcc_s.so.1 <span class="o">=&gt;</span> /lib/libgcc_s.so.1 <span class="o">(</span>0x00000000<span class="o">)</span>
libc.so.0 <span class="o">=&gt;</span> /lib/libc.so.0 <span class="o">(</span>0x00000000<span class="o">)</span>
/lib/ld-uClibc.so.0 <span class="o">=&gt;</span> /lib/ld-uClibc.so.0 <span class="o">(</span>0x00000000<span class="o">)</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="logit">logit</h4>

<p>用来配合系统启动脚本记录信息的。不做为日常工具使用。</p>

<h4 id="lspci">lspci</h4>

<p>lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="rouge-code"><pre>Basic display modes:
<span class="nt">-mm</span>	以机器可读的方式转储 PCI 设备数据 <span class="o">(</span>支持两种模式：普通和冗余<span class="o">)</span>，便于脚本解析<span class="o">(</span><span class="nt">-m</span>过时的格式<span class="o">)</span>
<span class="nt">-t</span>	显示总线树
Display options:
<span class="nt">-v</span>	显示设备的详细信息
<span class="nt">-k</span>	Show kernel drivers handling each device
<span class="nt">-x</span>	以十六进制显示 PCI 配置空间 <span class="o">(</span>configuration space<span class="o">)</span> 的前64个字节映象 <span class="o">(</span>标准头部信息<span class="o">)</span>。此参数对调试驱动和 lspci 本身很有用。
<span class="nt">-xxx</span>	以十六进制显示所有 PCI 配置空间的映象。此选项只有 root 可用，并且很多 PCI 设备在你试图读取配置空间的未定义部分时会崩溃 <span class="o">(</span>此操作可能不违反PCI标准，但是它至少非常愚蠢<span class="o">)</span>。
<span class="nt">-xxxx</span>	显示十六进制转储的4096字节的扩展配置空间<span class="o">(</span>root only<span class="o">)</span>
<span class="nt">-b</span>	以总线为中心进行查看。显示所有 IRQ 号和内存地址，就象 PCI 总线上的卡看到的一样，而不是内核看到的内容。
<span class="nt">-D</span>	总是显示域数字

Resolving of device ID<span class="s1">'s to names:
-n	以数字形式显示 PCI和设备号
-nn	以数字形式显示 PCI 生产厂商和设备号
Selection of devices:
-s [[[[&lt;domain&gt;]:]&lt;bus&gt;]:][&lt;slot&gt;][.[&lt;func&gt;]]		只显示设备在选定的插槽
-d [&lt;vendor&gt;]:[&lt;device&gt;]						只显示指定ID的设备

Other options:
-i &lt;file&gt;	使用 &lt;file&gt; 作为 PCI ID 数据库而不是使用默认的/usr/share/pci.ids.gz
-p &lt;file&gt;	使用 &lt;dir&gt; 作为包含 PCI 总线信息的目录而不是使用默认的目录 /proc/bus/pci
-M	使用总线映射模式，这种模式对总线进行全面地扫描以查明总线上的所有设备，包括配置错误的桥之后的设备。请注意，此操作只应在调试时使 用，并可能造成系统崩溃 (只在设备有错误的时候，但是不幸的是它们存在)，此命令只有 root 可以使用。同时，在不直接接触硬件的 PCI 访问模式中使用 -M 参数没有意义，因为显示的结果 (排除 lspci 中的 bug 的影响) 与普通的列表模式相同
PCI access options:
-A &lt;method&gt;	使用指定的PCI访问方法 (see `-A help'</span> <span class="k">for </span>a list<span class="o">)</span>
<span class="nt">-O</span> &lt;par&gt;<span class="o">=</span>&lt;val&gt;	PCI访问参数设置 <span class="o">(</span>see <span class="sb">`</span><span class="nt">-O</span> <span class="nb">help</span><span class="s1">' for a list)
-G	增加库的调试等级。(可用于所有系统)
-H &lt;mode&gt;	通过 Intel 架构 1 来实现直接硬件访问(&lt;mode&gt; = 1 or 2)
-F &lt;file&gt;	从所给的包含 lspci -x 命令输出的文件中获取相关信息。这在分析用户提交的错误报告时很有用，因为你可以用任何方式来显示硬件配置信息而无需为了获取更多信息打扰用户。(可用于所有系统)
</span></pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="mkfsreiserfs">mkfs.reiserfs</h4>

<h4 id="mke2fs">mke2fs</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="rouge-code"><pre>Usage: mke2fs <span class="o">[</span><span class="nt">-c</span>|-t|-l filename] <span class="o">[</span><span class="nt">-b</span> block-size] <span class="o">[</span><span class="nt">-f</span> fragment-size]
        <span class="o">[</span><span class="nt">-i</span> bytes-per-inode] <span class="o">[</span><span class="nt">-j</span><span class="o">]</span> <span class="o">[</span><span class="nt">-J</span> journal-options] <span class="o">[</span><span class="nt">-N</span> number-of-inodes]
        <span class="o">[</span><span class="nt">-m</span> reserved-blocks-percentage] <span class="o">[</span><span class="nt">-o</span> creator-os] <span class="o">[</span><span class="nt">-g</span> blocks-per-group]
        <span class="o">[</span><span class="nt">-L</span> volume-label] <span class="o">[</span><span class="nt">-M</span> last-mounted-directory] <span class="o">[</span><span class="nt">-O</span> feature[,...]]
        <span class="o">[</span><span class="nt">-r</span> fs-revision] <span class="o">[</span><span class="nt">-R</span> options] <span class="o">[</span><span class="nt">-qvSV</span><span class="o">]</span> device <span class="o">[</span>blocks-count]
说明：建立ext2文件系统。
选项：
<span class="nt">-b</span>&lt;区块大小&gt;	指定区块大小，单位为字节。
<span class="nt">-c</span>	检查是否有损坏的区块。
<span class="nt">-f</span>&lt;不连续区段大小&gt;	指定不连续区段的大小，单位为字节。
<span class="nt">-F</span>	不管指定的设备为何，强制执行mke2fs。
<span class="nt">-i</span>&lt;字节&gt;	指定<span class="s2">"字节/inode"</span>的比例。
<span class="nt">-N</span>&lt;inode数&gt;	指定要建立的inode数目。
<span class="nt">-l</span>&lt;文件&gt;	从指定的文件中，读取文件西中损坏区块的信息。
<span class="nt">-L</span>&lt;标签&gt;	设置文件系统的标签名称。
<span class="nt">-m</span>&lt;百分比值&gt;	指定给管理员保留区块的比例，预设为5%。
<span class="nt">-M</span>	记录最后一次挂入的目录。
<span class="nt">-q</span>	执行时不显示任何信息。
<span class="nt">-r</span>	指定要建立的ext2文件系统版本。
<span class="nt">-R</span><span class="o">=</span>&lt;区块数&gt;	设置磁盘阵列参数。
<span class="nt">-S</span>	仅写入superblock与group descriptors，而不更改inode able inode bitmap以及block bitmap。
<span class="nt">-v</span>	执行时显示详细信息。
<span class="nt">-V</span>	显示版本信息。
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="rouge-code"><pre>把该设备格式化成ext2文件系统：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># mke2fs /dev/sda6 </span>

把该设备格式化成ext3文件系统：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># mke2fs –j /dev/sda6 </span>

把该设备格式化成ext3文件系统：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># mke2fs -t ext3 /dev/sda6</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="mkfsext3">mkfs.ext3</h4>

<h4 id="parted">parted</h4>

<h4 id="sar">sar</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
</pre></td><td class="rouge-code"><pre>Usage: sar <span class="o">[</span> options <span class="o">]</span> <span class="o">[</span> &lt;interval&gt; <span class="o">[</span> &lt;count&gt; <span class="o">]</span> <span class="o">]</span>
主要选项和报告:
<span class="nt">-e</span> <span class="o">[</span>hh:mm:ss]	统计的结束时间
<span class="nt">-s</span> <span class="o">[</span>hh:mm:ss]	统计的开始时间
<span class="nt">-f</span> <span class="o">[</span>filename] 	从文件读取统计样本
<span class="nt">-A</span>	相当于 <span class="nt">-bBcdqrRuvwWy</span> <span class="nt">-I</span> SUM <span class="nt">-I</span> XALL <span class="nt">-n</span> ALL <span class="nt">-P</span> AL
<span class="nt">-b</span>	I/O和传输速率率统计
<span class="nt">-B</span>	分页数据
<span class="nt">-d</span>	块设备统计
<span class="nt">-H</span>	Hugepages 利用率统计
<span class="nt">-I</span> <span class="o">{</span> &lt;int&gt; | SUM | ALL | XALL <span class="o">}</span>
中断统计
<span class="nt">-m</span> <span class="o">{</span> &lt;keyword&gt; <span class="o">[</span>,...] | ALL <span class="o">}</span>
电源管理统计
关键词:
CPU	CPU瞬时时钟频率
FAN	风扇速度
FREQ	CPU平均时钟频率
IN	电压输入
TEMP	设备温度
USB	USB设备接入系统
<span class="nt">-n</span> <span class="o">{</span> &lt;keyword&gt; <span class="o">[</span>,...] | ALL <span class="o">}</span>
网络统计
关键词:
DEV	网络接口流量
EDEV	网络接口流量 <span class="o">(</span>errors<span class="o">)</span>
NFS	NFS客户端
NFSD	NFS 服务端
SOCK	Sockets <span class="o">(</span>v4<span class="o">)</span>
IP	IP 流量 <span class="o">(</span>v4<span class="o">)</span>
EIP	IP 流量 <span class="o">(</span>v4<span class="o">)</span> <span class="o">(</span>errors<span class="o">)</span>
ICMP	ICMP 流量 <span class="o">(</span>v4<span class="o">)</span>
EICMP	ICMP 流量 <span class="o">(</span>v4<span class="o">)</span> <span class="o">(</span>errors<span class="o">)</span>
TCP	TCP 流量 <span class="o">(</span>v4<span class="o">)</span>
ETCP	TCP 流量 <span class="o">(</span>v4<span class="o">)</span> <span class="o">(</span>errors<span class="o">)</span>
UDP	UDP 流量 <span class="o">(</span>v4<span class="o">)</span>
SOCK6	Sockets <span class="o">(</span>v6<span class="o">)</span>
IP6	IP 流量 <span class="o">(</span>v6<span class="o">)</span>
EIP6	IP 流量 <span class="o">(</span>v6<span class="o">)</span> <span class="o">(</span>errors<span class="o">)</span>
ICMP6	ICMP 流量 <span class="o">(</span>v6<span class="o">)</span>
EICMP6	ICMP 流量 <span class="o">(</span>v6<span class="o">)</span> <span class="o">(</span>errors<span class="o">)</span>
UDP6	UDP 流量 <span class="o">(</span>v6<span class="o">)</span>
<span class="nt">-q</span>	队列长度和平均负载统计
<span class="nt">-r</span>	内存利用率统计
<span class="nt">-R</span>	内存统计信息
<span class="nt">-S</span>	交换空间利用率统计
<span class="nt">-u</span> <span class="o">[</span> ALL <span class="o">]</span>
CPU利用率统计
<span class="nt">-v</span>	内核表统计信息
<span class="nt">-w</span>	任务创建和系统交换数据
<span class="nt">-W</span>	交换数据
<span class="nt">-y</span>	TTY设备统计
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td class="rouge-code"><pre><span class="o">[</span>/root <span class="o">]</span> <span class="c">#sar –u </span>
%user ： 用户模式下消耗的CPU时间的比例；
%nice：通过nice改变了进程调度优先级的进程，在用户模式下消耗的CPU时间的比例；
%system：系统模式下消耗的CPU时间的比例；
%iowait：CPU等待磁盘I/O而导致空闲状态消耗时间的比例；
%steal：利用Xen等操作系统虚拟化技术时，等待其他虚拟CPU计算占用的时间比例；
%idle：CPU没有等待磁盘I/O等的空闲状态消耗的时间比例；
注：
如果 %iowait 的值过高，表示硬盘存在I/O瓶颈 
如果 %idle 的值高但系统响应慢时，有可能是 CPU 等待分配内存，此时应加大内存容量 
如果 %idle 的值持续低于 10，则系统的 CPU 处理能力相对较低，表明系统中最需要解决的资源是 CPU。

查看所有接口每秒流量情况：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># sar –n DEV 1</span>

查看某些接口的流量情况：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># echo "eth1.eth2" &gt;/data/etc/sar.conf ; sar -n DEV 1</span>

查看每秒的内存情况：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># sar -r 1</span>
其中:
kbmemfree：	空闲物理内存量；
kbmemused：	使用中的物理内存量；
%memused：	物理内存量使用率；
kbbuffers：	内核中作为缓冲区使用的物理内存容量；
kbcacheed：	内核中作为缓存使用的物理内存容量；
kbswpfree：	交换区的空闲容量；
kbswpused：	使用中的交换区容量；

查看平均负载：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># sar -q 1</span>
其中：
runq-sz：	运行队列的长度（等待运行的进程数） 
plist-sz：	进程列表中进程（processes）和线程（threads）的数量 
ldavg-1：	最后1分钟的系统平均负载（System load average） 
ldavg-5：	过去5分钟的系统平均负载 
ldavg-15：	过去15分钟的系统平均负载

查看IO和传输速率的统计信息：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># sar -b 1</span>
其中：
tps：	每秒钟物理设备的 I/O 传输总量 
rtps:	每秒钟从物理设备读入的数据总量 
wtps:	每秒钟向物理设备写入的数据总量 
bread/s:	每秒钟从物理设备读入的数据量，单位为 块/s 
bwrtn/s:	每秒钟向物理设备写入的数据量，单位为 块/s
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="scp">scp</h4>

<p>scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录.。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="rouge-code"><pre>scp <span class="o">[</span><span class="nt">-1246BCpqrv</span><span class="o">]</span> <span class="o">[</span><span class="nt">-c</span> cipher] <span class="o">[</span><span class="nt">-F</span> ssh_config] <span class="o">[</span><span class="nt">-i</span> identity_file]
           <span class="o">[</span><span class="nt">-l</span> limit] <span class="o">[</span><span class="nt">-o</span> ssh_option] <span class="o">[</span><span class="nt">-P</span> port] <span class="o">[</span><span class="nt">-S</span> program]
           <span class="o">[[</span>user@]host1:]file1 <span class="o">[</span>...] <span class="o">[[</span>user@]host2:]file2
参数：
<span class="nt">-1</span>	强制scp命令使用协议ssh1
<span class="nt">-2</span>	强制scp命令使用协议ssh2
<span class="nt">-4</span>	强制scp命令只使用IPv4寻址
<span class="nt">-6</span>	强制scp命令只使用IPv6寻址
<span class="nt">-B</span>	使用批处理模式（传输过程中不询问传输口令或短语）
<span class="nt">-C</span>	允许压缩。（将-C标志传递给ssh，从而打开压缩功能）
<span class="nt">-p</span>	保留原文件的修改时间，访问时间和访问权限。
<span class="nt">-q</span>	不显示传输进度条。
<span class="nt">-r</span>	递归复制整个目录。
<span class="nt">-v</span>	详细方式显示输出。scp和ssh<span class="o">(</span>1<span class="o">)</span>会显示出整个过程的调试信息。这些信息用于调试连接，验证和配置问题。
<span class="nt">-c</span>	cipher以cipher将数据传输进行加密，这个选项将直接传递给ssh。
<span class="nt">-F</span>	ssh_config指定一个替代的ssh配置文件，此参数直接传递给ssh。
<span class="nt">-i</span>	identity_file从指定文件中读取传输时使用的密钥文件，此参数直接传递给ssh。
<span class="nt">-l</span>	limit限定用户所能使用的带宽，以Kbit/s为单位。
<span class="nt">-o</span>	ssh_option如果习惯于使用ssh_config<span class="o">(</span>5<span class="o">)</span>中的参数传递方式，
<span class="nt">-P</span>	port  注意是大写的P, port是指定数据传输用到的端口号
<span class="nt">-S</span>	program指定加密传输时所使用的程序。此程序必须能够理解ssh<span class="o">(</span>1<span class="o">)</span>的选项。
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：
~~~bash
从本地服务器复制到远程服务器：
(1) 复制文件：
[/root ] # scp local_file remote_username@remote_ip:remote_folder
或者
[/root ] # scp local_file remote_username@remote_ip:remote_file
或者
[/root ] # scp local_file remote_ip:remote_folder
或者
[/root ] # scp local_file remote_ip:remote_file
第1,2个指定了用户名，命令执行后需要输入用户密码，第1个仅指定了远程的目录，文件名字不变，第2个指定了文件名
第3,4个没有指定用户名，命令执行后需要输入用户名和密码，第3个仅指定了远程的目录，文件名字不变，第4个指定了文件名</p>

<p>(2) 复制目录：
命令格式：
[/root ] # scp -r local_folder remote_username@remote_ip:remote_folder
或者
[/root ] # scp -r local_folder remote_ip:remote_folder
第1个指定了用户名，命令执行后需要输入用户密码；
第2个没有指定用户名，命令执行后需要输入用户名和密码；</p>

<p>从远程服务器复制到本地服务器</p>

<p>从远程复制到本地的scp命令与上面的命令雷同，只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
~~~</p>

<h4 id="sendmail">sendmail</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="rouge-code"><pre>Usage: sendmail <span class="o">[</span>OPTIONS] <span class="o">[</span>RECIPIENT_EMAIL]...

Read email from stdin and send it

Standard options:
        <span class="nt">-t</span>              Read additional recipients from message body
        <span class="nt">-f</span> SENDER       Sender <span class="o">(</span>required<span class="o">)</span>
        <span class="nt">-o</span> OPTIONS      Various options. <span class="nt">-oi</span> implied, others are ignored
        <span class="nt">-i</span>              <span class="nt">-oi</span> synonym. implied and ignored

Busybox specific options:
        <span class="nt">-v</span>              Verbose
        <span class="nt">-w</span> SECS         Network <span class="nb">timeout</span>
        <span class="nt">-H</span> <span class="s1">'PROG ARGS'</span>  Run connection helper
                        Examples:
                        <span class="nt">-H</span> <span class="s1">'exec openssl s_client -quiet -tls1 -starttls smtp
                                -connect smtp.gmail.com:25'</span> &lt;email.txt
                                <span class="o">[</span>4&lt;username_and_passwd.txt | <span class="nt">-auUSER</span> <span class="nt">-apPASS</span><span class="o">]</span>
                        <span class="nt">-H</span> <span class="s1">'exec openssl s_client -quiet -tls1
                                -connect smtp.gmail.com:465'</span> &lt;email.txt
                                <span class="o">[</span>4&lt;username_and_passwd.txt | <span class="nt">-auUSER</span> <span class="nt">-apPASS</span><span class="o">]</span>
        <span class="nt">-S</span> HOST[:PORT]  Server
        <span class="nt">-auUSER</span>         Username <span class="k">for </span>AUTH LOGIN
        <span class="nt">-apPASS</span>         Password <span class="k">for </span>AUTH LOGIN

Other options are silently ignored<span class="p">;</span> <span class="nt">-oi</span> <span class="nt">-t</span> is implied
Use makemime to create emails with attachments
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="ssh">ssh</h4>

<p>Dropbear client v0.53.1</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="rouge-code"><pre>ssh <span class="o">[</span>options] <span class="o">[</span>user@]host[/port][,[user@]host/port],...] <span class="o">[</span><span class="nb">command</span><span class="o">]</span>
参数:
<span class="nt">-p</span>	&lt;remoteport&gt;
<span class="nt">-l</span>	&lt;username&gt;
<span class="nt">-t</span>	强制配置 pseudo-tty。这可以在远程机器上去执行任意的 screen-based 程 式，示例操作 menu services
<span class="nt">-T</span>	Don<span class="s1">'t allocate a pty
-N	Don'</span>t run a remote <span class="nb">command</span>
<span class="nt">-f</span>	该参数将ssh连接送入后台执行。这在验证已经完成且TCP/IP转发已经建立的情况下会生效。这对在远程主机上启动X程序显得十分重要。其后用户将被提示要求输入口令<span class="o">(</span>提供的认证代理不运行<span class="o">)</span>，然后将连接送往后台。
<span class="nt">-y</span>	Always accept remote host key <span class="k">if </span>unknown
<span class="nt">-s</span>	Request a subsystem <span class="o">(</span>use <span class="k">for </span>sftp<span class="o">)</span>
<span class="nt">-i</span> &lt;identityfile&gt;	<span class="o">(</span>multiple allowed<span class="o">)</span>
<span class="nt">-A</span>	利用转发认证代理
<span class="nt">-L</span> &lt;<span class="o">[</span>listenaddress:]listenport:remotehost:remoteport&gt;这个参数转发在本地主机上的指定端口与远程主机上的指定端口连接完成的信息。
<span class="nt">-g</span>	该参数允许远程主机通过端口转发与主机端口相连，通常情况下仅允许本地主机这样做。
<span class="nt">-R</span> &lt;<span class="o">[</span>listenaddress:]listenport:remotehost:remoteport&gt;该参数转发远程主机指定端口到本地主机指定端口上的连接。它和-L参数的工作过程刚好相反。套接字监听远程主机上的端口，只要针对该端口有一个连接，它将被转发到本地主机和主机端口。该转发端口可以在不同的主机上通过配置文件来进行不同的配置。特权端口只能在以超级账号登录到远程主机时转发。
<span class="nt">-W</span> &lt;receive_window_buffer&gt; <span class="o">(</span>default 24576, larger may be faster, max 1MB<span class="o">)</span>
<span class="nt">-K</span> &lt;keepalive&gt;	<span class="o">(</span>0 is never, default 10<span class="o">)</span>
<span class="nt">-I</span> &lt;idle_timeout&gt; <span class="o">(</span>0 is never, default 0<span class="o">)</span>
<span class="nt">-B</span> &lt;endhost:endport&gt; Netcat-alike forwarding
<span class="nt">-J</span> &lt;proxy_program&gt; Use program pipe rather than TCP connection
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="rouge-code"><pre>使用ssh登陆到ZXFW：
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ssh admin@172.16.12.73/28022</span>
或者
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ssh -l admin 172.16.12.73/28022</span>
或者
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># ssh –l admin –p 28022 172.16.12.73</span>
连接成功后会出现密码输入页面：
<span class="o">[</span>/root <span class="o">]</span><span class="c"># ssh -l admin 172.16.12.73/28022</span>
admin@172.16.12.73<span class="s1">'s password:
输入正确密码后就可以成功登陆到ZXFW
</span></pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="sshd">sshd</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="rouge-code"><pre>Usage: sshd <span class="o">[</span>options]
Options are:
<span class="nt">-b</span> bannerfile	当用户登陆时终端显示的内容 <span class="o">(</span>default: none<span class="o">)</span>
<span class="nt">-d</span> dsskeyfile	使用 dsskeyfile 作为DSS主机密钥
<span class="o">(</span>default: /etc/dropbear/dropbear_dss_host_key<span class="o">)</span>
<span class="nt">-r</span> rsakeyfile	使用 rsakeyfile作为RSA DSS主机密钥
<span class="o">(</span>default: /etc/dropbear/dropbear_rsa_host_key<span class="o">)</span>
<span class="nt">-F</span>	Don<span class="s1">'t fork into background
-E	将错误日志打印到屏幕而不记录到syslog
-m	登陆时不显示公告
-w	不允许使用root用户登陆
-s	禁用密码登陆
-g	禁止root账号使用密码登陆
-j	禁用本地端口转发
-k	禁用远程端口转发
-a	允许连接从任何主机端口转发
-p [address:]port
监听指定的tcp端口(和可选地址),可以指定多达10个 (如果没有指定，默认端口是22)
-P PidFile	创建进程文件 PidFile  (default /var/db/dropbear.pid)
</span></pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre></td><td class="rouge-code"><pre>建立ssh服务，并在用户登陆时显示指定文件：sshd <span class="nt">-b</span> /etc/version
其中，/etc/version的内容是：
  ucf/Linux 2.06 <span class="o">(</span>RAM<span class="o">)</span>
  Kernel 3.4.0
  Build <span class="nb">time</span>: 09:18:18 2012/07-14
  2000+<span class="o">(</span>new<span class="o">)</span>/<span class="o">(</span>4 TP + 4 FIBRE<span class="o">)</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="tcpdump">tcpdump</h4>

<p>tcpdump version 4.3.0-PRE-GIT_2012_02_24
libpcap version 1.3.0-PRE-GIT_2012_02_24</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
</pre></td><td class="rouge-code"><pre>tcpdump <span class="o">[</span><span class="nt">-aAbdDefhHIJKlLnNOpqRStuUvxX</span><span class="o">]</span> <span class="o">[</span> <span class="nt">-B</span> size <span class="o">]</span> <span class="o">[</span> <span class="nt">-c</span> count <span class="o">]</span>
                <span class="o">[</span> <span class="nt">-C</span> file_size <span class="o">]</span> <span class="o">[</span> <span class="nt">-E</span> algo:secret <span class="o">]</span> <span class="o">[</span> <span class="nt">-F</span> file <span class="o">]</span> <span class="o">[</span> <span class="nt">-G</span> seconds <span class="o">]</span>
                <span class="o">[</span> <span class="nt">-i</span> interface <span class="o">]</span> <span class="o">[</span> <span class="nt">-j</span> tstamptype <span class="o">]</span> <span class="o">[</span> <span class="nt">-M</span> secret <span class="o">]</span>
                <span class="o">[</span> <span class="nt">-r</span> file <span class="o">]</span> <span class="o">[</span> <span class="nt">-s</span> snaplen <span class="o">]</span> <span class="o">[</span> <span class="nt">-T</span> <span class="nb">type</span> <span class="o">]</span> <span class="o">[</span> <span class="nt">-w</span> file <span class="o">]</span>
                <span class="o">[</span> <span class="nt">-W</span> filecount <span class="o">]</span> <span class="o">[</span> <span class="nt">-y</span> datalinktype <span class="o">]</span> <span class="o">[</span> <span class="nt">-z</span> <span class="nb">command</span> <span class="o">]</span>
                <span class="o">[</span> <span class="nt">-Z</span> user <span class="o">]</span> <span class="o">[</span> expression <span class="o">]</span>
参数:
<span class="nt">-A</span>	以ASCII码方式显示每一个数据包<span class="o">(</span>不会显示数据包中链路层头部信息<span class="o">)</span><span class="nb">.</span> 在抓取包含网页数据的数据包时,可方便查看数据<span class="o">(</span>nt: 即Handy <span class="k">for </span>capturing web pages<span class="o">)</span><span class="nb">.</span>
<span class="nt">-c</span>   count	tcpdump将在接受到count个数据包后退出.
<span class="nt">-C</span>  file-size 	<span class="o">(</span>nt: 此选项用于配合-w file 选项使用<span class="o">)</span>
该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了,将关闭此文件,另创一个文件继续用于原始数据包的记录.新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节<span class="o">(</span>nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M<span class="o">=</span>1024 ＊ 1024 ＝ 1,048,576<span class="o">)</span>
<span class="nt">-d</span>  	以容易阅读的形式,在标准输出上打印出编排过的包匹配码, 随后tcpdump停止.<span class="o">(</span>nt | rt: human readable, 容易阅读的,通常是指以ascii码来打印一些信息. compiled, 编排过的. packet-matching code, 包匹配码,含义未知, 需补充<span class="o">)</span>
<span class="nt">-dd</span> 	以C语言的形式打印出包匹配码.
<span class="nt">-ddd</span>	以十进制数的形式打印出包匹配码<span class="o">(</span>会在包匹配码之前有一个附加的<span class="s1">'count'</span>前缀<span class="o">)</span><span class="nb">.</span>
<span class="nt">-D</span>	打印系统中所有tcpdump可以在其上进行抓包的网络接口. 每一个接口会打印出数字编号, 相应的接口名字, 以及可能的一个网络接口描述. 其中网络接口名字和数字编号可以用在tcpdump 的-i flag 选项<span class="o">(</span>nt: 把名字或数字代替flag<span class="o">)</span>, 来指定要在其上抓包的网络接口.
此选项在不支持接口列表命令的系统上很有用<span class="o">(</span>nt: 比如, Windows 系统, 或缺乏 ifconfig <span class="nt">-a</span> 的UNIX系统<span class="o">)</span><span class="p">;</span> 接口的数字编号在windows 2000 或其后的系统中很有用, 因为这些系统上的接口名字比较复杂, 而不易使用.    如果tcpdump编译时所依赖的libpcap库太老,-D 选项不会被支持, 因为其中缺乏 pcap_findalldevs<span class="o">()</span>函数.
<span class="nt">-e</span>	每行的打印输出中将包括数据包的数据链路层头部信息
<span class="nt">-E</span>  spi@ipaddr algo:secret,...    可通过spi@ipaddr algo:secret 来解密IPsec ESP包<span class="o">(</span>nt | rt:IPsec Encapsulating Security Payload,IPsec 封装安全负载, IPsec可理解为, 一整套对ip数据包的加密协议, ESP 为整个IP 数据包或其中上层协议部分被加密后的数据,前者的工作模式称为隧道模式<span class="p">;</span> 后者的工作模式称为传输模式 <span class="nb">.</span> 工作原理, 另需补充<span class="o">)</span><span class="nb">.</span>
需要注意的是, 在终端启动tcpdump 时, 可以为IPv4 ESP packets 设置密钥<span class="o">(</span>secret）.
可用于加密的算法包括des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 或者没有<span class="o">(</span>none<span class="o">)</span>.默认的是des-cbc<span class="o">(</span>nt: des, Data Encryption Standard, 数据加密标准, 加密算法未知, 另需补充<span class="o">)</span>.secret 为用于ESP 的密钥, 使用ASCII 字符串方式表达. 如果以 0x 开头, 该密钥将以16进制方式读入.
该选项中ESP 的定义遵循RFC2406, 而不是 RFC1827. 并且, 此选项只是用来调试的, 不推荐以真实密钥<span class="o">(</span>secret<span class="o">)</span>来使用该选项, 因为这样不安全: 在命令行中输入的secret 可以被其他人通过ps 等命令查看到.
除了以上的语法格式<span class="o">(</span>nt: 指spi@ipaddr algo:secret<span class="o">)</span>, 还可以在后面添加一个语法输入文件名字供tcpdump 使用<span class="o">(</span>nt：即把spi@ipaddr algo:secret,... 中...换成一个语法文件名<span class="o">)</span><span class="nb">.</span> 此文件在接受到第一个ESP　包时会打开此文件, 所以最好此时把赋予tcpdump 的一些特权取消<span class="o">(</span>nt: 可理解为, 这样防范之后, 当该文件为恶意编写时,不至于造成过大损害<span class="o">)</span><span class="nb">.</span>
<span class="nt">-f</span>	显示外部的IPv4 地址时<span class="o">(</span>nt: foreign IPv4 addresses, 可理解为, 非本机ip地址<span class="o">)</span>, 采用数字方式而不是名字.<span class="o">(</span>此选项是用来对付Sun公司的NIS服务器的缺陷<span class="o">(</span>nt: NIS, 网络信息服务, tcpdump 显示外部地址的名字时会用到她提供的名称服务<span class="o">)</span>: 此NIS服务器在查询非本地地址名字时,常常会陷入无尽的查询循环<span class="o">)</span><span class="nb">.</span>
由于对外部<span class="o">(</span>foreign<span class="o">)</span>IPv4地址的测试需要用到本地网络接口<span class="o">(</span>nt: tcpdump 抓包时用到的接口<span class="o">)</span>及其IPv4 地址和网络掩码. 如果此地址或网络掩码不可用, 或者此接口根本就没有设置相应网络地址和网络掩码<span class="o">(</span>nt: linux 下的 <span class="s1">'any'</span> 网络接口就不需要设置地址和掩码, 不过此<span class="s1">'any'</span>接口可以收到系统中所有接口的数据包<span class="o">)</span>, 该选项不能正常工作.
<span class="nt">-F</span>  file	使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.-i  interface    指定tcpdump 需要监听的接口.  如果没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已配置好的接口<span class="o">(</span>不包括 loopback 接口<span class="o">)</span>.一但找到第一个符合条件的接口, 搜寻马上结束.
在采用2.2版本或之后版本内核的Linux 操作系统上, <span class="s1">'any'</span> 这个虚拟网络接口可被用来接收所有网络接口上的数据包<span class="o">(</span>nt: 这会包括目的是该网络接口的, 也包括目的不是该网络接口的<span class="o">)</span><span class="nb">.</span> 需要注意的是如果真实网络接口不能工作在<span class="s1">'混杂'</span>模式<span class="o">(</span>promiscuous<span class="o">)</span>下,则无法在<span class="s1">'any'</span>这个虚拟的网络接口上抓取其数据包.
如果 <span class="nt">-D</span> 标志被指定, tcpdump会打印系统中的接口编号，而该编号就可用于此处的interface 参数.-l  对标准输出进行行缓冲<span class="o">(</span>nt: 使标准输出设备遇到一个换行符就马上把这行的内容打印出来<span class="o">)</span>.在需要同时观察抓包打印以及保存抓包记录的时候很有用. 比如, 可通过以下命令组合来达到此目的:    <span class="sb">``</span>tcpdump –l | <span class="nb">tee </span>dat<span class="s1">''</span> 或者 <span class="sb">``</span>tcpdump –l <span class="o">&gt;</span> dat &amp; <span class="nb">tail</span> –f dat<span class="s1">''</span>.<span class="o">(</span>nt: 前者使用tee来把tcpdump 的输出同时放到文件dat和标准输出中, 而后者通过重定向操作<span class="s1">'&gt;'</span>, 把tcpdump的输出放到dat 文件中, 同时通过tail把dat文件中的内容放到标准输出中<span class="o">)</span>
<span class="nt">-L</span>	列出指定网络接口所支持的数据链路层的类型后退出.<span class="o">(</span>nt: 指定接口通过-i 来指定<span class="o">)</span>
<span class="nt">-m</span>  module	通过module 指定的file 装载SMI MIB 模块<span class="o">(</span>nt: SMI，Structure of Management Information, 管理信息结构MIB, Management Information Base, 管理信息库. 可理解为, 这两者用于SNMP<span class="o">(</span>Simple Network Management Protoco<span class="o">)</span>协议数据包的抓取. 具体SNMP 的工作原理未知, 另需补充<span class="o">)</span><span class="nb">.</span>    此选项可多次使用, 从而为tcpdump 装载不同的MIB 模块.
<span class="nt">-M</span>  secret	如果TCP 数据包<span class="o">(</span>TCP segments<span class="o">)</span>有TCP-MD5选项<span class="o">(</span>在RFC 2385有相关描述<span class="o">)</span>, 则为其摘要的验证指定一个公共的密钥secret.-n  不对地址<span class="o">(</span>比如, 主机地址, 端口号<span class="o">)</span>进行数字表示到名字表示的转换.
<span class="nt">-N</span>	不打印出host 的域名部分. 比如, 如果设置了此选现, tcpdump 将会打印<span class="s1">'nic'</span> 而不是 <span class="s1">'nic.ddn.mil'</span><span class="nb">.</span>
<span class="nt">-O</span>	不启用进行包匹配时所用的优化代码. 当怀疑某些bug是由优化代码引起的, 此选项将很有用.
<span class="nt">-p</span>	一般情况下, 把网络接口设置为非<span class="s1">'混杂'</span>模式. 但必须注意 , 在特殊情况下此网络接口还是会以<span class="s1">'混杂'</span>模式来工作； 从而, <span class="s1">'-p'</span> 的设与不设, 不能当做以下选现的代名词:<span class="s1">'ether host {local-hw-add}'</span> 或  <span class="s1">'ether broadcast'</span><span class="o">(</span>nt: 前者表示只匹配以太网地址为host 的包, 后者表示匹配以太网地址为广播地址的数据包<span class="o">)</span><span class="nb">.</span>
<span class="nt">-q</span>	快速<span class="o">(</span>也许用<span class="s1">'安静'</span>更好?<span class="o">)</span>打印输出. 即打印很少的协议相关信息, 从而输出行都比较简短.
<span class="nt">-R</span>	设定tcpdump 对 ESP/AH 数据包的解析按照 RFC1825而不是RFC1829<span class="o">(</span>nt: AH, 认证头, ESP， 安全负载封装, 这两者会用在IP包的安全传输机制中<span class="o">)</span><span class="nb">.</span> 如果此选项被设置, tcpdump 将不会打印出<span class="s1">'禁止中继'</span>域<span class="o">(</span>nt: relay prevention field<span class="o">)</span><span class="nb">.</span> 另外,由于ESP/AH规范中没有规定ESP/AH数据包必须拥有协议版本号域,所以tcpdump不能从收到的ESP/AH数据包中推导出协议版本号.
<span class="nt">-r</span>  file	从文件file 中读取包数据. 如果file 字段为 <span class="s1">'-'</span> 符号, 则tcpdump 会从标准输入中读取包数据.
<span class="nt">-S</span>	打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.<span class="o">(</span>nt: 相对顺序号可理解为, 相对第一个TCP 包顺序号的差距,比如, 接受方收到第一个数据包的绝对顺序号为232323, 对于后来接收到的第2个,第3个数据包, tcpdump会打印其序列号为1, 2分别表示与第一个数据包的差距为1 和 2. 而如果此时-S 选项被设置, 对于后来接收到的第2个, 第3个数据包会打印出其绝对顺序号:232324, 232325<span class="o">)</span><span class="nb">.</span>
<span class="nt">-s</span>  snaplen	设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节<span class="o">(</span>而支持网络接口分接头<span class="o">(</span>nt: NIT, 上文已有描述,可搜索<span class="s1">'网络接口分接头'</span>关键字找到那里<span class="o">)</span>的SunOS系列操作系统中默认的也是最小值是96<span class="o">)</span>.68字节对于IP, ICMP<span class="o">(</span>nt: Internet Control Message Protocol,因特网控制报文协议<span class="o">)</span>, TCP 以及 UDP 协议的报文已足够, 但对于名称服务<span class="o">(</span>nt: 可理解为dns, nis等服务<span class="o">)</span>, NFS服务相关的数据包会产生包截短. 如果产生包截短这种情况, tcpdump的相应打印输出行中会出现<span class="s1">''</span><span class="o">[</span>|proto]<span class="s1">''</span>的标志（proto 实际会显示为被截短的数据包的相关协议层次<span class="o">)</span><span class="nb">.</span> 需要注意的是, 采用长的抓取长度<span class="o">(</span>nt: snaplen比较大<span class="o">)</span>, 会增加包的处理时间, 并且会减少tcpdump 可缓存的数据包的数量， 从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下, 抓取长度越小越好.把snaplen 设置为0 意味着让tcpdump自动选择合适的长度来抓取数据包.
<span class="nt">-T</span>  <span class="nb">type	</span>强制tcpdump按type指定的协议所描述的包结构来分析收到的数据包.  目前已知的type 可取的协议为:    aodv <span class="o">(</span>Ad-hoc On-demand Distance Vector protocol, 按需距离向量路由协议, 在Ad hoc<span class="o">(</span>点对点模式<span class="o">)</span>网络中使用<span class="o">)</span>,    cnfp <span class="o">(</span>Cisco  NetFlow  protocol<span class="o">)</span>,  rpc<span class="o">(</span>Remote Procedure Call<span class="o">)</span>, rtp <span class="o">(</span>Real-Time Applications protocol<span class="o">)</span>,    rtcp <span class="o">(</span>Real-Time Applications con-trol protocol<span class="o">)</span>, snmp <span class="o">(</span>Simple Network Management Protocol<span class="o">)</span>,    tftp <span class="o">(</span>Trivial File Transfer Protocol, 碎文件协议<span class="o">)</span>, vat <span class="o">(</span>Visual Audio Tool, 可用于在internet 上进行电视电话会议的应用层协议<span class="o">)</span>, 以及wb <span class="o">(</span>distributed White Board, 可用于网络会议的应用层协议<span class="o">)</span><span class="nb">.</span>
<span class="nt">-t</span>	在每行输出中不打印时间戳
<span class="nt">-tt</span>	不对每行输出的时间进行格式处理<span class="o">(</span>nt: 这种格式一眼可能看不出其含义, 如时间戳打印成1261798315<span class="o">)</span>
<span class="nt">-ttt</span>	tcpdump 输出时, 每两行打印之间会延迟一个段时间<span class="o">(</span>以毫秒为单位<span class="o">)</span><span class="nt">-tttt</span>  在每行打印的时间戳之前添加日期的打印
<span class="nt">-u</span>	打印出未加密的NFS 句柄<span class="o">(</span>nt: handle可理解为NFS 中使用的文件句柄, 这将包括文件夹和文件夹中的文件<span class="o">)</span>
<span class="nt">-U</span>	使得当tcpdump在使用-w 选项时, 其文件写入与包的保存同步.<span class="o">(</span>nt: 即, 当每个数据包被保存时, 它将及时被写入文件中,而不是等文件的输出缓冲已满时才真正写入此文件<span class="o">)</span> 
<span class="nt">-U</span> 标志在老版本的libcap库<span class="o">(</span>nt: tcpdump 所依赖的报文捕获库<span class="o">)</span>上不起作用, 因为其中缺乏pcap_cump_flush<span class="o">()</span>函数.
<span class="nt">-v</span>	当分析和打印的时候, 产生详细的输出. 比如, 包的生存时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性检测, 比如对IP或ICMP包头部的校验和.
<span class="nt">-vv</span>	产生比-v更详细的输出. 比如, NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码.
<span class="nt">-vvv</span>	产生比-vv更详细的输出. 比如, telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来<span class="o">(</span>nt: telnet 的SB,SE选项含义未知, 另需补充<span class="o">)</span><span class="nb">.</span>
<span class="nt">-w</span>	把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新读入并进行分析和打印.
<span class="nt">-W</span> filecount   此选项与-C 选项配合使用, 这将限制可打开的文件数目, 并且当文件数据超过这里设置的限制时, 依次循环替代之前的文件, 这相当于一个拥有filecount 个文件的文件缓冲池. 同时, 该选项会使得每个文件名的开头会出现足够多并用来占位的0, 这可以方便这些文件被正确的排序.
<span class="nt">-x</span>	当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据<span class="o">(</span>但不包括连接层的头部<span class="o">)</span>.总共打印的数据大小不会超过整个数据包的大小与snaplen 中的最小值. 必须要注意的是, 如果高层协议数据没有snaplen 这么长,并且数据链路层<span class="o">(</span>比如, Ethernet层<span class="o">)</span>有填充数据, 则这些填充数据也会被打印.<span class="o">(</span>nt: so <span class="k">for </span><span class="nb">link  </span>layers  that pad, 未能衔接理解和翻译, 需补充 <span class="o">)</span>
<span class="nt">-xx</span>	tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 其中包括数据链路层的头部.
<span class="nt">-X</span>	当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据<span class="o">(</span>但不包括连接层的头部<span class="o">)</span>.这对于分析一些新协议的数据包很方便.
<span class="nt">-XX</span>	当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据, 其中包括数据链路层的头部.这对于分析一些新协议的数据包很方便.
<span class="nt">-y</span> datalinktype	设置tcpdump 只捕获数据链路层协议类型是datalinktype的数据包
<span class="nt">-Z</span> user	使tcpdump 放弃自己的超级权限<span class="o">(</span>如果以root用户启动tcpdump, tcpdump将会有超级用户权限<span class="o">)</span>, 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID<span class="o">(</span>nt: tcpdump 此处可理解为tcpdump 运行之后对应的进程<span class="o">)</span>
此选项也可在编译的时候被设置为默认打开.<span class="o">(</span>nt: 此时user 的取值未知, 需补充<span class="o">)</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="rouge-code"><pre>1、	打印所有172.16.12.190 的主机收到的和发出的所有的数据包
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump host 172.16.12.190</span>
2、	打印主机172.16.12.190和172.16.12.188主机之间通信的所有数据
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump host 172.16.12.190 and \(172.16.12.188\)</span>
3、	打印主机172.16.12.190和172.16.12.188或者172.16.12.189主机之间通信的所有数据
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump host 172.16.12.190 and \(172.16.12.188 or 172.16.12.189\)</span>
4、	获取主机172.16.12.1901除了和主机172.16.12.188之外所有主机通信的ip包
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump host 172.16.12.190 and not 172.16.12.188或者</span>
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump host 172.16.12.190 and ! 172.16.12.188</span>
5、	截获主机172.16.12.190发送的所有数据
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump -i eth0 src host 172.16.12.190</span>
6、	截获发送到主机172.16.12.190所有数据
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump -i eth0 dst host 172.16.12.190</span>
7、	获取主机172.16.12.190接收或发出的telnet包
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump tcp port 23 host 172.16.12.190</span>
8、	打印TCP会话中的的开始和结束数据包, 并且数据包的源或目的不是本地网络上的主机.<span class="o">(</span>nt: localnet, 实际使用时要真正替换成本地网络的名字<span class="o">)</span>
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump 'tcp[tcpflags] &amp; (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'</span>
9、	打印所有源或目的端口是80, 网络层协议为IPv4, 并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的数据包
<span class="o">[</span>/root <span class="o">]</span> <span class="c"># tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&amp;0xf)&lt;&lt;2)) - ((tcp[12]&amp;0xf0)&gt;&gt;2)) != 0)'</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h3 id="section-19">6.3 扩展软件包</h3>

<h4 id="curl">curl</h4>

<p>它是一个命令行下支持HTTP、FTP、POP3等协议的工具。底层通过调用 libcurl实现各种功能。</p>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="rouge-code"><pre>（1）	下载一个文件 
<span class="c"># curl http://172.16.12.55/tmp/1.rar</span>

（2）打印 HTTP REQUEST/RESPONSE 信息
<span class="c"># curl –v http://172.16.12.55/tmp/1.txt</span>
 

（3）模拟JDFW 登陆
可以看到 JDFW打印了登陆成功的信息。
 
（4）上传文件到HTTP SERVER <span class="o">(</span>172.16.12.34<span class="o">)</span>
首先要在SERVER中安装好一个支持上传文件CGI。（若有其它服务器现成的也可以）
下面的这个CGI是个人以前写的，方便产品使用时使用。
<span class="c"># ipkg update </span>
<span class="c"># ipkg install http_tools</span>
<span class="c"># ipkg files http_tools</span>
可以看到 有file_upload这个CGI和file_upload.html这个页面。
 

在这里我们只要调用 /cgi-bin/file_upload 这个CGI就可以了。
下面是在client向server上传 x.log 这个文件。

<span class="c"># curl -H "Expect: " -F "filename=@x.log; type=text/plain" http://172.16.12.34/cgi-bin/file_upload</span>

</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="dnsutils">dns_utils</h4>

<p>包含三个文件: host, nslookup, dig，均是对dns域名进行查询类的工具。
其中dig功能最为强大。
host 和 dig的用法可用 –h 查询，或上网查找更为详细的中文说明。
nslookup的用法和windows平台命令nslookup一样。</p>

<p>示例：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="rouge-code"><pre><span class="o">(</span>1<span class="o">)</span>	向dns server  202.102.192.68 查询www.a.com的IP是多少
<span class="c"># host www.a.com   202.102.192.68</span>
<span class="c"># dig  www.a.com  @202.102.192.68</span>
上面两种均是使用UDP进行传输，若想用TCP，如下：
<span class="c"># host  -T www.a.com  202.102.192.68</span>
<span class="c"># dig     www.a.com  @202.102.192.68  +tcp</span>

<span class="o">(</span>2<span class="o">)</span>	向dns server  202.102.192.68 查询 1.1.1.1 对应的域名是多少<span class="o">(</span>反向查询解析<span class="o">)</span>
<span class="c"># host –t ptr  1.1.1.1  202.102.192.68 </span>
<span class="c"># dig  –x    1.1.1.1  @202.102.192.68</span>


针对JDFW中DNS  plugin的功能<span class="o">(</span>强制客户端使用TCP进行域名查询请求<span class="o">)</span>。先要在JDFW中开启DNS插件，设置 参数为10，执行下面命令：
<span class="c"># dig www.test.com @172.16.12.15 </span>
首先发送基于UDP协议的请求，JDFW收到后，返回response，其次可以看到dig使用了TCP进行连接。
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="dnsmasq">dnsmasq</h4>

<p>是一开源的DNS 实现软件，但它附带DHCP,TFTP功能下面简单说下做为一个DNS Server的使用。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="rouge-code"><pre><span class="c"># ipkg update ; ipkg install dnsmasq   // 安装</span>
ucf <span class="o">[</span> /root <span class="o">]</span><span class="c"># ipkg files dnsmasq      // 列出安装后的文件</span>
Package dnsmasq <span class="o">(</span>2.61<span class="o">)</span> is installed on root and has the following files:
/data/local/bin/dnsmasq
/data/etc/dnsmasq.conf

Successfully terminated.
默认也没有什么配置，这时要在/etc/hosts里添加相应的域名-IP记录。如我想请求www.abc.com域名时，服务器返回给我的解析IP是192.168.1.2，按如下操作：
<span class="c"># echo “192.168.1.2 www.abc.com” &gt;&gt;/etc/hosts  // 将域名记录添加到 /etc/hosts文件中去</span>
<span class="c"># dnsmasq           // 启动服务</span>
<span class="c"># netstat –anu |grep 53  // 查看udp 53端口有没有监听</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<p>下面介绍常见的几个选项，想查看所有的选项，可使用dnsmasq –help。
-q  会打印每个DNS Query ，方便调试排查问题。
-d  dnsmasq 运行后在前端，不会进行守护进程模式。方便调试。
-W 添加一条SRV记录；</p>

<p>-w 用法</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
</pre></td><td class="rouge-code"><pre>ucf <span class="o">[</span> etc <span class="o">]</span><span class="c"># dnsmasq -W _http._tcp.pkg.FreeBSD.org,pkg0.isc.freebsd.org,80 -d  -q</span>
dnsmasq: started, version 2.61 cachesize 150
dnsmasq: compile <span class="nb">time </span>options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack
dnsmasq: reading /etc/resolv.conf
dnsmasq: using nameserver 202.102.192.68#53
dnsmasq: <span class="nb">read</span> /etc/hosts - 1 addresses
dnsmasq: query[SRV] _http._tcp.pkg.FreeBSD.org from 172.16.12.154
dnsmasq: config _http._tcp.pkg.FreeBSD.org is &lt;SRV&gt;
可以看到，12.154 向 此server发了一条srv Query。
<span class="o">(</span>host –t srv _http._tcp.pkg.FreeBSD.org 172.16.12.22<span class="o">)</span>


<span class="nt">-c</span> 指定一个配置 文件 ：
它可以从系统的/etc/resolv.conf /etc/hosts中读取相应记录.
ucf <span class="o">[</span> etc <span class="o">]</span><span class="c"># cat /etc/hosts</span>
192.168.45.27  www.host27.com
ucf <span class="o">[</span> etc <span class="o">]</span><span class="c"># cat /etc/resolv.conf</span>
<span class="c"># Generated by dhcpcd for interface eth1</span>
<span class="c">#nameserver 192.168.202.29</span>
<span class="c">#nameserver 192.168.2.17</span>
nameserver 202.102.192.68

/data/etc/dnsmasq.conf 配置 
resolv-file<span class="o">=</span>/etc/resolv.conf
<span class="nv">address</span><span class="o">=</span>/pkg.freebsd.org/149.20.53.28     
<span class="nv">address</span><span class="o">=</span>/pkg0.isc.freebsd.org/149.20.53.28     
<span class="nv">address</span><span class="o">=</span>/pkg0.ydx.freebsd.org/77.88.40.109     
<span class="nv">address</span><span class="o">=</span>/pkg0.bme.freebsd.org/213.138.116.73   
<span class="nv">address</span><span class="o">=</span>/pkg0.nyi.freebsd.org/96.47.72.120     
<span class="nv">address</span><span class="o">=</span>/pkgmir.pkg.freebsd.org/149.20.53.28     
<span class="nv">server</span><span class="o">=</span>202.102.199.68
srv-host<span class="o">=</span>_http._tcp.pkg.FreeBSD.org,pkg0.isc.freebsd.org,80,1
srv-host<span class="o">=</span>_http._tcp.pkg.FreeBSD.org,pkg0.ydx.freebsd.org,80,2
srv-host<span class="o">=</span>_http._tcp.pkg.FreeBSD.org,pkg0.bme.freebsd.org,80,3
srv-host<span class="o">=</span>_http._tcp.pkg.FreeBSD.org,pkg0.nyi.freebsd.org,80,4
log-queries

下面是向12.22 发出一个A记录的请求，可以看到12.22 回应了。
root@freebsd-10 <span class="o">[</span> cgi-bin <span class="o">]</span><span class="c"># host pkgmir.pkg.freebsd.org 172.16.12.22 </span>
Using domain server:
Name: 172.16.12.22
Address: 172.16.12.22#53
Aliases: 

pkgmir.pkg.freebsd.org has address 149.20.53.28


下面是向12.22 发出一个SRV记录的请求，可以看到12.22 回应4条记录。
root@freebsd-10 <span class="o">[</span> ~ <span class="o">]</span><span class="c"># host -t srv _http._tcp.pkg.FreeBSD.org 172.16.12.22</span>
Using domain server:
Name: 172.16.12.22
Address: 172.16.12.22#53
Aliases: 

_http._tcp.pkg.FreeBSD.org has SRV record 4 0 80 pkg0.nyi.freebsd.org.
_http._tcp.pkg.FreeBSD.org has SRV record 3 0 80 pkg0.bme.freebsd.org.
_http._tcp.pkg.FreeBSD.org has SRV record 2 0 80 pkg0.ydx.freebsd.org.
_http._tcp.pkg.FreeBSD.org has SRV record 1 0 80 pkg0.isc.freebsd.org.

下面是上面两个QUERY的一些信息显示：
ucf <span class="o">[</span> etc <span class="o">]</span><span class="c"># dnsmasq -q -d -C /data/etc/dnsmasq.conf </span>
dnsmasq: started, version 2.61 cachesize 150
dnsmasq: compile <span class="nb">time </span>options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack
dnsmasq: using nameserver 202.102.199.68#53
dnsmasq: reading /etc/resolv.conf
dnsmasq: using nameserver 202.102.192.68#53
dnsmasq: using nameserver 202.102.199.68#53
dnsmasq: <span class="nb">read</span> /etc/hosts - 1 addresses
dnsmasq: query[A] pkgmir.pkg.freebsd.org from 172.16.12.154
dnsmasq: config pkgmir.pkg.freebsd.org is 149.20.53.28
dnsmasq: query[AAAA] pkgmir.pkg.freebsd.org from 172.16.12.154
dnsmasq: config pkgmir.pkg.freebsd.org is NODATA-IPv6
dnsmasq: query[MX] pkgmir.pkg.freebsd.org from 172.16.12.154
dnsmasq: config pkgmir.pkg.freebsd.org is NODATA
dnsmasq: query[SRV] _http._tcp.pkg.FreeBSD.org from 172.16.12.154
dnsmasq: config _http._tcp.pkg.FreeBSD.org is &lt;SRV&gt;
dnsmasq: config _http._tcp.pkg.FreeBSD.org is &lt;SRV&gt;
dnsmasq: config _http._tcp.pkg.FreeBSD.org is &lt;SRV&gt;
dnsmasq: config _http._tcp.pkg.FreeBSD.org is &lt;SRV&gt;
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="floodhttp">flood_http</h4>

<p>用于将HTTP报文请求头分成几部分发送出去，满足zxwaf及其它产品的一些功能测试。
用法: flood_http –f <data_file>  [-t <xxms> ] [-e] [-p <port>]  <ipaddr>
从data_file中每次读取一行，遇到以”#”开头的忽略，遇到有内容行，且下一行是空行，将此行发送出去。Sleep一段时间，由 –t 设置(单位是ms)，若下一行还是有内容行，一直读取。</ipaddr></port></xxms></data_file></p>

<p>如</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="rouge-code"><pre><span class="c"># cat data.txt</span>
GET / HTTP/1.1
User-Agent: wget
Host: 172.16.12.249

<span class="c">#Connection: Keep-Alive</span>
<span class="c">#AA</span>
<span class="c">#BB</span>
<span class="c">#CC</span>
<span class="c">#DD</span>

http_tools
	包括httping命令，和file_upload 上传功能。主要用于ZXFW HTTP文件上传功能测试。
安装完后，需要自己开启HTTP SERVER，如: 
<span class="c"># httpd –h /data/html</span>

然后从http://172.16.12.X/file_upload.html 即可。

</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="gnunetcat">GNU/netcat</h4>

<p>GNU netcat 0.7.1</p>

<ul>
  <li>添加此工具为了方便测试zxwaf、zxfw 规则时构造协议payload。</li>
  <li>但本人对此工具源码做了一些简单修改：</li>
  <li>添加了十六进制输入表示;</li>
  <li>增加注释行忽略模式.</li>
  <li>增加ipv6 支持</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="rouge-code"><pre>（1）	构造一个HTTP请求发送出去
<span class="c"># echo –e “GET / HTTP/1.1\r\nHost: 172.16.12.55\r\nConnect: close\r\n\r\n” | netcat 172.16.12.55 80 </span>


（2）	构造一个HTTP请求发送出去<span class="o">(</span>十六进制表示<span class="o">)</span>
<span class="c"># echo “|474554| / HTTP/1.1|0d0a|Host: 172.16.12.55|0d0a|Connect: close|0d0a0d0a|” | netcat 172.16.12.55 80 </span>


（3）	构造一个HTTP请求发送出去 <span class="o">(</span>文件做为输入源<span class="o">)</span>
<span class="nb">cat </span>http_request.txt
 

	   <span class="c"># netcat 172.16.12.55 80 &lt; http_request.txt</span>

（4）增加注释行
</pre></td></tr></tbody></table></code></pre></div></div>

<p>可以看到 注释行 被打印了出来。
新版本做了一些信息提示，包括TCP RST, UNIX 时间等。
netcat (The GNU Netcat) 0.7.1 (git: 2.3.13-76-g39f27a4)</p>

<p>Ipv6监控一个端口：
# netcat –lp 84 -6</p>

<h4 id="nginx">nginx</h4>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="rouge-code"><pre>nginx: Usage: nginx <span class="o">[</span>-?hvVtq] <span class="o">[</span><span class="nt">-s</span> signal] <span class="o">[</span><span class="nt">-c</span> filename] <span class="o">[</span><span class="nt">-p</span> prefix] <span class="o">[</span><span class="nt">-g</span> directives]
启动一个nginx作为WEB服务器
Options:
  -?,-h         显示帮助
  <span class="nt">-v</span>            显示版本
  <span class="nt">-V</span>            显示版本和配置信息
  <span class="nt">-t</span>            测试配置信息是否正确
  <span class="nt">-q</span>            : suppress non-error messages during configuration testing
  <span class="nt">-s</span> signal     : 发送一个信号给主进程： stop, quit, reopen, reload
  <span class="nt">-p</span> prefix     : 设置路径前缀 <span class="o">(</span>default: /data/<span class="o">)</span>
  <span class="nt">-c</span> filename   : 设置配置文件 <span class="o">(</span>default: /data/etc/nginx-conf/nginx.conf<span class="o">)</span>
  <span class="nt">-g</span> directives : <span class="nb">set </span>global directives out of configuration file
</pre></td></tr></tbody></table></code></pre></div></div>

<h4 id="gnuwget">GNU/wget</h4>

<p>系统自带的wget 功能较GNU/wget弱，可以使用ipkg install wget 安装GNU/wget版本。
此wget用法基本一致。</p>

<p>Proxy功能使用。
如果代理服务器是 172.16.12.184:808 
# echo “http-proxy=172.16.12.184:808”&nbsp;» /root/.wgetrc
# echo use_proxy=on”&nbsp;»/root/.wgetrc
# wget http://<web_server></web_server></p>

<p>自定义HTTP报文头功能
使用 –header添加HTTP协议规范的头部字段，如：
wget –header  “Cdn-Sip: 172.16.12.3” http://172.16.1.1/index.html</p>

<h4 id="webbench">webbench</h4>

<p>一个简单的web压力测试工具, -c <count>指定client的个数, 通过fork count个进程, 每个进程使用同一个源ip, 发起Http请求, 但不支持虚拟ip功能, 所以本人对其做了简单修改, 增加虚拟IP, 和使用线程代替进程fork.</count></p>

<h2 id="faq">7 FAQ</h2>

<h3 id="linux">7.1 为什么会创建这么一个精剪的小型linux</h3>

<p>答: 主要还是历史原因。 当时公司仅有ZXDMS这一个产品时，产品硬件还处于x86阶段，且硬件不够高。在测试ZXDMS时，经常需要一些测试机器，出于经费的考虑，只能使用暂时不用的ZXDMS的设备装上普通的linux发行版做为测试机使用。</p>

<p>同时硬盘也很紧张，装一个完整的GNU/Linux需要的时间也长，且配置等都需要时间。有时临时要增加一台测试机，通过这种方式，会感觉到很影响工作效率。所以有了做一个定制的linux想法：安装配置快捷，尽量使用CF卡和DOM盘这种小容量磁盘。</p>

<h3 id="ucflnux">7.2 ucf/lnux的目前使用现状</h3>

<p>目前用途主要如下</p>

<ul>
  <li>做为一个普通的linux测试机，充当测试环境中的server或client角色；</li>
  <li>做为攻击机; 有sod、fnd、fnd-2、fnd-3;</li>
  <li>做为跑脚本的测试机；ZXDMS和ZXWAF那边均有批量测试的相关脚本；</li>
  <li>做为18F机房的总管理交换机；运行着自行开发的monit2程序，管理着整个机房的所有的机器MAC地址。</li>
</ul>

<h3 id="ucflinux">7.3 我在其它机器上编译的二进制在ucf/linux却无法运行</h3>

<p>是的。ucf/linux由于历史原因，把体积小巧做为了一个重要目标，所以当时使用交叉编译生成的。对GNU LIBC是不兼容的。 
这个暂时无解；若真有必要在ucf/linux上运行，可联系管理员，由管理员编译下。</p>

<h3 id="ucflinux-1">7.4 我想要运行某个程序，ucf/linux却没有</h3>

<p>ucf/linux由于是定制系统，支持的命令工具毕竟有限，远没有GNU/Linux支持的多，扩展性好。如有必要，可联系管理员，制作ipkg软件包。</p>

<h2 id="section-20">8 更新历史</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: center">日期</th>
      <th style="text-align: center">内容</th>
      <th style="text-align: center">修订者</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">2019/1024</td>
      <td style="text-align: center">初稿并输出HTML</td>
      <td style="text-align: center">夏小进</td>
    </tr>
  </tbody>
</table>


  


</body></html>